You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2021/05/21 12:31:57 UTC

[airavata-custos] branch develop updated: add swagger apis

This is an automated email from the ASF dual-hosted git repository.

isjarana pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-custos.git


The following commit(s) were added to refs/heads/develop by this push:
     new 64fbe39  add swagger apis
     new d5a5e92  Merge pull request #170 from isururanawaka/grpc-gateway
64fbe39 is described below

commit 64fbe39f86ec4a6094ebac6506d1ce5995fd82e6
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Fri May 21 08:30:25 2021 -0400

    add swagger apis
---
 .../ResourceSecretManagementAgentClient.java       |    3 +-
 .../src/main/proto/AgentProfileService.proto       |    2 +
 .../src/main/proto/ClusterManagementService.proto  |    2 +-
 .../src/main/proto/CredentialStoreService.proto    |    1 +
 .../src/main/resources/bootstrap.properties        |    2 +-
 .../main/resources/vault-client-truststore.pkcs12  |  Bin 1626 -> 1626 bytes
 .../src/main/proto/LoggingService.proto            |    2 +
 .../proto/FederatedAuthenticationService.proto     |    1 +
 .../src/main/proto/IamAdminService.proto           |    2 +-
 .../src/main/proto/IdentityService.proto           |    2 +-
 .../src/main/proto/ResourceSecretService.proto     |    1 +
 .../main/resources/vault-client-truststore.pkcs12  |  Bin 1626 -> 1626 bytes
 .../src/main/proto/SharingService.proto            |    2 +-
 .../src/main/proto/TenantProfileService.proto      |    1 +
 .../src/main/proto/UserProfileService.proto        |    2 +-
 .../src/main/proto/AgentManagementService.proto    |    2 +
 .../custos-integration-services-swagger/Dockerfile |    5 +
 .../custos-integration-services-swagger/pom.xml    |  101 +
 .../src/main/helm/.helmignore                      |   22 +
 .../src/main/helm/Chart.yaml                       |    5 +
 .../src/main/helm/templates/NOTES.txt              |   21 +
 .../src/main/helm/templates/_helpers.tpl           |   56 +
 .../src/main/helm/templates/deployment.yaml        |   61 +
 .../src/main/helm/templates/ingress.yaml           |   21 +
 .../src/main/helm/templates/service.yaml           |   25 +
 .../src/main/helm/templates/serviceaccount.yaml    |    8 +
 .../main/helm/templates/tests/test-connection.yaml |   15 +
 .../src/main/helm/values.yaml                      |    8 -
 .../services/swagger/SwaggerInitializer.java       |   50 +
 .../custos/services/swagger/SwaggerSpecConfig.java |   55 +
 .../swagger/controller/SwaggerUIController.java    |   37 +
 .../src/main/resources/application.properties      |   26 +
 .../resources/protos}/AgentManagementService.proto |    2 +
 .../resources/protos}/AgentProfileService.proto    |    2 +
 .../protos}/ClusterManagementService.proto         |    2 +-
 .../resources/protos}/CredentialStoreService.proto |    1 +
 .../protos}/FederatedAuthenticationService.proto   |    1 +
 .../resources/protos}/GroupManagementService.proto |    1 +
 .../main/resources/protos}/IamAdminService.proto   |    2 +-
 .../protos}/IdentityManagementService.proto        |    3 +-
 .../main/resources/protos}/IdentityService.proto   |    2 +-
 .../resources/protos}/LogManagementService.proto   |    2 +-
 .../main/resources/protos}/LoggingService.proto    |    2 +
 .../protos}/ResourceSecretManagementService.proto  |    1 +
 .../resources/protos}/ResourceSecretService.proto  |    1 +
 .../protos}/SharingManagementService.proto         |    1 +
 .../main/resources/protos}/SharingService.proto    |    2 +-
 .../protos}/TenantManagementService.proto          |   11 +-
 .../resources/protos}/TenantProfileService.proto   |    1 +
 .../resources/protos}/UserManagementService.proto  |    6 +-
 .../resources/protos}/UserProfileService.proto     |    2 +-
 .../agent-management-service/swagger.json          |  830 +++++++
 .../cluster-management-service/swagger.json        |   59 +
 .../group-management-service/swagger.json          | 2119 +++++++++++++++++
 .../identity-management-service/swagger.json       |  659 ++++++
 .../log-management-service/swagger.json            |  245 ++
 .../swagger.json                                   | 1792 +++++++++++++++
 .../sharing-management-service/swagger.json        | 2390 ++++++++++++++++++++
 .../tenant-management-service/swagger.json         | 1660 ++++++++++++++
 .../user-management-service/swagger.json           | 1997 ++++++++++++++++
 .../src/main/proto/GroupManagementService.proto    |    1 +
 .../src/main/proto/IdentityManagementService.proto |    1 +
 .../log-management-service/pom.xml                 |    1 +
 .../src/main/helm/values.yaml                      |    1 +
 .../src/main/proto/LogManagementService.proto      |    2 +-
 custos-integration-services/pom.xml                |    1 +
 .../proto/ResourceSecretManagementService.proto    |    1 +
 .../src/main/proto/SharingManagementService.proto  |    1 +
 .../src/main/proto/TenantManagementService.proto   |    1 +
 .../src/main/proto/UserManagementService.proto     |    2 +-
 pom.xml                                            |   31 +
 71 files changed, 12345 insertions(+), 35 deletions(-)

diff --git a/custos-client-sdks/custos-java-clients/resource-secret-management-client/src/main/java/org/apache/custos/resource/secret/management/client/ResourceSecretManagementAgentClient.java b/custos-client-sdks/custos-java-clients/resource-secret-management-client/src/main/java/org/apache/custos/resource/secret/management/client/ResourceSecretManagementAgentClient.java
index 8d729fe..e088168 100644
--- a/custos-client-sdks/custos-java-clients/resource-secret-management-client/src/main/java/org/apache/custos/resource/secret/management/client/ResourceSecretManagementAgentClient.java
+++ b/custos-client-sdks/custos-java-clients/resource-secret-management-client/src/main/java/org/apache/custos/resource/secret/management/client/ResourceSecretManagementAgentClient.java
@@ -85,7 +85,8 @@ public class ResourceSecretManagementAgentClient extends ResourceSecretManagemen
     }
 
     public AddResourceCredentialResponse addPasswordCredential(String userToken, String agentToken,
-                                                               String clientId, String description, String ownerId,  String userId,String password) {
+                                                               String clientId, String description,
+                                                               String ownerId,  String userId,String password) {
         return super.addPasswordCredential(clientId,
                 description, ownerId, userId, password,attachedHeaders(userToken, agentToken));
     }
diff --git a/custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto b/custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto
index 2f59393..7d26877 100644
--- a/custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto
+++ b/custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto
@@ -23,6 +23,8 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.agent.profile.service;
 
+option go_package = "./pb";
+
 message Agent {
     string id = 1;
     AgentStatus status = 2;
diff --git a/custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto b/custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto
index 9739d06..6c58702 100644
--- a/custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto
+++ b/custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto
@@ -22,7 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.cluster.management.service;
-
+option go_package = "./pb";
 message GetServerCertificateRequest {
     string secretName = 1;
     string namespace = 2;
diff --git a/custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto b/custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto
index da6002b..691df79 100644
--- a/custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto
+++ b/custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.credential.store.service;
+option go_package = "./pb";
 
 enum Type {
     CUSTOS = 0;
diff --git a/custos-core-services/credential-store-core-service/src/main/resources/bootstrap.properties b/custos-core-services/credential-store-core-service/src/main/resources/bootstrap.properties
index dc723c8..8e7e1df 100644
--- a/custos-core-services/credential-store-core-service/src/main/resources/bootstrap.properties
+++ b/custos-core-services/credential-store-core-service/src/main/resources/bootstrap.properties
@@ -16,7 +16,7 @@
 #  specific language governing permissions and limitations
 #  under the License
 
-spring.cloud.vault.token={{vault_token}}
+spring.cloud.vault.token={{token}}
 spring.cloud.vault.scheme=https
 spring.cloud.vault.host=vault.custos.scigap.org
 spring.cloud.vault.port=31190
diff --git a/custos-core-services/credential-store-core-service/src/main/resources/vault-client-truststore.pkcs12 b/custos-core-services/credential-store-core-service/src/main/resources/vault-client-truststore.pkcs12
index 8314bc0..57b06d9 100644
Binary files a/custos-core-services/credential-store-core-service/src/main/resources/vault-client-truststore.pkcs12 and b/custos-core-services/credential-store-core-service/src/main/resources/vault-client-truststore.pkcs12 differ
diff --git a/custos-core-services/custos-logging/src/main/proto/LoggingService.proto b/custos-core-services/custos-logging/src/main/proto/LoggingService.proto
index 889ca3d..7ab3fa5 100644
--- a/custos-core-services/custos-logging/src/main/proto/LoggingService.proto
+++ b/custos-core-services/custos-logging/src/main/proto/LoggingService.proto
@@ -25,6 +25,8 @@ package org.apache.custos.logging.service;
 
 import "google/protobuf/empty.proto";
 
+option go_package = "./pb";
+
 
 message LogEvent {
     int64 created_time = 1;
diff --git a/custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto b/custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto
index 900fb77..7da3d0c 100644
--- a/custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto
+++ b/custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto
@@ -23,6 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.federated.authentication.service;
 import "google/protobuf/struct.proto";
+option go_package = "./pb";
 
 enum InstitutionCacheType {
     WHITELIST = 0;
diff --git a/custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto b/custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto
index 77ff45b..30c3469 100644
--- a/custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto
+++ b/custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto
@@ -24,7 +24,7 @@ option java_multiple_files = true;
 package org.apache.custos.iam.service;
 
 import "google/protobuf/empty.proto";
-
+option go_package = "./pb";
 
 enum FederatedIDPs {
     CILOGON = 0;
diff --git a/custos-core-services/identity-core-service/src/main/proto/IdentityService.proto b/custos-core-services/identity-core-service/src/main/proto/IdentityService.proto
index da94996..e6ac2ba 100644
--- a/custos-core-services/identity-core-service/src/main/proto/IdentityService.proto
+++ b/custos-core-services/identity-core-service/src/main/proto/IdentityService.proto
@@ -23,7 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.identity.service;
 import "google/protobuf/struct.proto";
-
+option go_package = "./pb";
 
 message AuthToken {
     string access_token = 1;
diff --git a/custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto b/custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto
index fce978f..72c8800 100644
--- a/custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto
+++ b/custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto
@@ -23,6 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.resource.secret.service;
 
+option go_package = "./pb";
 
 enum ResourceOwnerType {
     TENANT_USER = 0;
diff --git a/custos-core-services/resource-secret-core-service/src/main/resources/vault-client-truststore.pkcs12 b/custos-core-services/resource-secret-core-service/src/main/resources/vault-client-truststore.pkcs12
index 8314bc0..57b06d9 100644
Binary files a/custos-core-services/resource-secret-core-service/src/main/resources/vault-client-truststore.pkcs12 and b/custos-core-services/resource-secret-core-service/src/main/resources/vault-client-truststore.pkcs12 differ
diff --git a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto b/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
index fff95b9..fca0096 100644
--- a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
+++ b/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
@@ -23,7 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.sharing.service;
 
-
+option go_package = "./pb";
 enum SearchCondition {
     EQUAL = 0;
     LIKE = 1;
diff --git a/custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto b/custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto
index 6073bfc..2af0d86 100644
--- a/custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto
+++ b/custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.tenant.profile.service;
+option go_package = "./pb";
 
 message Tenant {
     int64 tenant_id = 1;
diff --git a/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto b/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
index fb840ad..66197e6 100644
--- a/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
+++ b/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
@@ -22,7 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.user.profile.service;
-
+option go_package = "./pb";
 
 enum UserStatus {
     ACTIVE = 0;
diff --git a/custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto b/custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto
index 6dd59e6..12609e7 100644
--- a/custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto
+++ b/custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto
@@ -28,6 +28,8 @@ import "google/rpc/error_details.proto";
 import "google/protobuf/empty.proto";
 import "IamAdminService.proto";
 
+option go_package = "./pb";
+
 
 message AgentSearchRequest {
     int64 tenantId = 2;
diff --git a/custos-integration-services/custos-integration-services-swagger/Dockerfile b/custos-integration-services/custos-integration-services-swagger/Dockerfile
new file mode 100644
index 0000000..a2b1503
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/Dockerfile
@@ -0,0 +1,5 @@
+FROM openjdk:11-jre-slim
+VOLUME /tmp
+ARG JAR_FILE
+ADD ${JAR_FILE} app.jar
+ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/pom.xml b/custos-integration-services/custos-integration-services-swagger/pom.xml
new file mode 100644
index 0000000..140a5a3
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/pom.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements. See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership. The ASF licenses this file
+  ~ to you 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>custos-integration-services</artifactId>
+        <groupId>org.apache.custos</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>custos-integration-services-swagger</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-bean-validators</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-sleuth</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-sleuth-zipkin</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-spring-web</artifactId>
+            <version>2.9.2</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.deviceinsight.helm</groupId>
+                <artifactId>helm-maven-plugin</artifactId>
+                <configuration>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/.helmignore b/custos-integration-services/custos-integration-services-swagger/src/main/helm/.helmignore
new file mode 100644
index 0000000..50af031
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/.helmignore
@@ -0,0 +1,22 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/Chart.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/Chart.yaml
new file mode 100644
index 0000000..f3c727f
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/Chart.yaml
@@ -0,0 +1,5 @@
+apiVersion: v1
+appVersion: "1.0"
+description: A Helm of custos log management service
+name: ${artifactId}
+version: ${project.version}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/NOTES.txt b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/NOTES.txt
new file mode 100644
index 0000000..b1a316f
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/NOTES.txt
@@ -0,0 +1,21 @@
+1. Get the application URL by running these commands:
+{{- if .Values.ingress.enabled }}
+{{- range $host := .Values.ingress.hosts }}
+  {{- range .paths }}
+  http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }}
+  {{- end }}
+{{- end }}
+{{- else if contains "NodePort" .Values.service.type }}
+  export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "helm.fullname" . }})
+  export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+  echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.service.type }}
+     NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+           You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "helm.fullname" . }}'
+  export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "helm.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
+  echo http://$SERVICE_IP:{{ .Values.service.port }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+  export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "helm.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+  echo "Visit http://127.0.0.1:8080 to use your application"
+  kubectl port-forward $POD_NAME 8080:80
+{{- end }}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/_helpers.tpl b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/_helpers.tpl
new file mode 100644
index 0000000..86a9288
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/_helpers.tpl
@@ -0,0 +1,56 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "helm.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "helm.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "helm.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Common labels
+*/}}
+{{- define "helm.labels" -}}
+app.kubernetes.io/name: {{ include "helm.name" . }}
+helm.sh/chart: {{ include "helm.chart" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "helm.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+    {{ default (include "helm.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+    {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/deployment.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/deployment.yaml
new file mode 100644
index 0000000..3c30739
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/deployment.yaml
@@ -0,0 +1,61 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ include "helm.fullname" . }}
+  labels:
+{{ include "helm.labels" . | indent 4 }}
+spec:
+  replicas: {{ .Values.replicaCount }}
+  rollingUpdate:
+    maxSurge: {{ .Values.rollingUpdate.maxSurge }}
+    maxUnavailable: {{ .Values.rollingUpdate.maxUnavailable }}
+  selector:
+    matchLabels:
+      app.kubernetes.io/name: {{ include "helm.name" . }}
+      app.kubernetes.io/instance: {{ .Release.Name }}
+  template:
+    metadata:
+      annotations:
+        linkerd.io/inject: enabled
+      labels:
+        app.kubernetes.io/name: {{ include "helm.name" . }}
+        app.kubernetes.io/instance: {{ .Release.Name }}
+    spec:
+    {{- with .Values.imagePullSecrets }}
+      imagePullSecrets:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+      serviceAccountName: {{ template "helm.serviceAccountName" . }}
+      securityContext:
+        {{- toYaml .Values.podSecurityContext | nindent 8 }}
+      containers:
+        - name: {{ .Chart.Name }}
+          securityContext:
+              {{- toYaml .Values.securityContext | nindent 12 }}
+          image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
+          imagePullPolicy: {{ .Values.image.pullPolicy }}
+          ports:
+            - name: http
+              containerPort: {{ .Values.service.port }}
+              protocol: TCP
+          readinessProbe:
+            httpGet:
+              path: /actuator/health
+              port: {{ .Values.service.port }}
+              initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
+              periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
+              successThreshold: {{ .Values.readinessProbe.successThreshold }}
+          resources:
+              {{- toYaml .Values.resources | nindent 12 }}
+      {{- with .Values.nodeSelector }}
+      nodeSelector:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+    {{- with .Values.affinity }}
+      affinity:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
+    {{- with .Values.tolerations }}
+      tolerations:
+        {{- toYaml . | nindent 8 }}
+    {{- end }}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/ingress.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/ingress.yaml
new file mode 100644
index 0000000..94b11c2
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/ingress.yaml
@@ -0,0 +1,21 @@
+apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
+kind: Ingress
+metadata:
+  name: ${artifactId}-ingress
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+    cert-manager.io/cluster-issuer: letsencrypt-production
+spec:
+  rules:
+    - host: custos.scigap.org
+      http:
+        paths:
+          - path: /services(/|$)(.*)
+            backend:
+              serviceName: custos-integration-services-swagger
+              servicePort: http
+
+  tls:
+    - hosts:
+        - custos.scigap.org
+      secretName: tls-secret
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/service.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/service.yaml
new file mode 100644
index 0000000..5752c1d
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/service.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ include "helm.name" . }}
+  annotations:
+    getambassador.io/config: |
+      ---
+      apiVersion: ambassador/v1
+      kind: Mapping
+      name: tenant-management-service-mapping
+      prefix: /tenant-management/
+      rewrite: ""
+      service: tenant-management-service.custos:50000
+  labels:
+{{ include "helm.labels" . | indent 4 }}
+spec:
+  type: {{ .Values.service.type }}
+  ports:
+    - port: {{ .Values.service.port }}
+      targetPort: http
+      protocol: TCP
+      name: http
+  selector:
+    app.kubernetes.io/name: {{ include "helm.name" . }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/serviceaccount.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/serviceaccount.yaml
new file mode 100644
index 0000000..87c82d5
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/serviceaccount.yaml
@@ -0,0 +1,8 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ template "helm.serviceAccountName" . }}
+  labels:
+{{ include "helm.labels" . | indent 4 }}
+{{- end -}}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/tests/test-connection.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/tests/test-connection.yaml
new file mode 100644
index 0000000..eac279f
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/templates/tests/test-connection.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Pod
+metadata:
+  name: "{{ include "helm.fullname" . }}-test-connection"
+  labels:
+{{ include "helm.labels" . | indent 4 }}
+  annotations:
+    "helm.sh/hook": test-success
+spec:
+  containers:
+    - name: wget
+      image: busybox
+      command: ['wget']
+      args:  ['{{ include "helm.fullname" . }}:{{ .Values.service.port }}']
+  restartPolicy: Never
diff --git a/custos-integration-services/log-management-service-parent/log-management-service/src/main/helm/values.yaml b/custos-integration-services/custos-integration-services-swagger/src/main/helm/values.yaml
similarity index 91%
copy from custos-integration-services/log-management-service-parent/log-management-service/src/main/helm/values.yaml
copy to custos-integration-services/custos-integration-services-swagger/src/main/helm/values.yaml
index 9bbe139..8cc578c 100644
--- a/custos-integration-services/log-management-service-parent/log-management-service/src/main/helm/values.yaml
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/helm/values.yaml
@@ -34,7 +34,6 @@ securityContext: {}
 service:
   type: ClusterIP
   port: 8080
-  grpcport: 7000
 
 ingress:
   enabled: false
@@ -73,13 +72,6 @@ role:
   binding: resource-role-binder
 
 
-proxy:
-   repository: apachecustos/log-management-service-sidecar
-   tag: 1.0-SNAPSHOT
-   port: 50000
-   webport: 50001
-   adminport: 9901
-
 rollingUpdate:
   maxSurge: 1
   maxUnavailable: 25%
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/SwaggerInitializer.java b/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/SwaggerInitializer.java
new file mode 100644
index 0000000..09b3c94
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/SwaggerInitializer.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.custos.services.swagger;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import static springfox.documentation.spi.DocumentationType.SWAGGER_2;
+
+
+@EnableSwagger2
+@SpringBootApplication
+public class SwaggerInitializer {
+    public static void main(String[] args) {
+        SpringApplication.run(SwaggerInitializer.class, args);
+    }
+
+
+    @Bean
+    public Docket swagger() {
+        return new Docket(SWAGGER_2)
+                .select()
+                .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build();
+    }
+
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/SwaggerSpecConfig.java b/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/SwaggerSpecConfig.java
new file mode 100644
index 0000000..ac49ee6
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/SwaggerSpecConfig.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.custos.services.swagger;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import springfox.documentation.swagger.web.SwaggerResource;
+import springfox.documentation.swagger.web.SwaggerResourcesProvider;
+
+@Configuration
+public class SwaggerSpecConfig {
+
+    @Primary
+    @Bean
+    public SwaggerResourcesProvider swaggerResourcesProvider() {
+        return () -> {
+            List<SwaggerResource> resources = new ArrayList<>();
+            Arrays.asList("log-management-service","agent-management-service",
+                    "cluster-management-service","group-management-service","identity-management-service",
+                    "resource-secret-management-service",
+                    "sharing-management-service","tenant-management-service","user-management-service")
+                    .forEach(resourceName -> resources.add(loadResource(resourceName)));
+            return resources;
+        };
+    }
+
+    private SwaggerResource loadResource(String resource) {
+        SwaggerResource wsResource = new SwaggerResource();
+        wsResource.setName(resource);
+        wsResource.setSwaggerVersion("2.0");
+        wsResource.setLocation("/swagger-apis/" + resource + "/swagger.json");
+        return wsResource;
+    }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/controller/SwaggerUIController.java b/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/controller/SwaggerUIController.java
new file mode 100644
index 0000000..f995936
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/java/org/apache/custos/services/swagger/controller/SwaggerUIController.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.custos.services.swagger.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("/swagger")
+public class SwaggerUIController {
+
+    @GetMapping("/{name}/{version}")
+    public String homePage(@PathVariable("name") String name, @PathVariable("version") String version, Model model) {
+        model.addAttribute("filePath", "/swagger/" + name + '/' + version + "/swagger.json");
+        return "redoc";
+    }
+}
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/application.properties b/custos-integration-services/custos-integration-services-swagger/src/main/resources/application.properties
new file mode 100644
index 0000000..aac3bad
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/application.properties
@@ -0,0 +1,26 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+#
+server.port=8080
+spring.application.name=swaggerService
+spring.zipkin.baseUrl=http://149.165.169.49:9411/
+spring.sleuth.sampler.probability=1
+management.security.enabled=false
+management.endpoints.web.exposure.include=*
+management.endpoint.metrics.enabled=true
+spring.main.allow-bean-definition-overriding=true
\ No newline at end of file
diff --git a/custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/AgentManagementService.proto
similarity index 99%
copy from custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/AgentManagementService.proto
index 6dd59e6..12609e7 100644
--- a/custos-integration-services/agent-management-service-parent/agent-management-service/src/main/proto/AgentManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/AgentManagementService.proto
@@ -28,6 +28,8 @@ import "google/rpc/error_details.proto";
 import "google/protobuf/empty.proto";
 import "IamAdminService.proto";
 
+option go_package = "./pb";
+
 
 message AgentSearchRequest {
     int64 tenantId = 2;
diff --git a/custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/AgentProfileService.proto
similarity index 98%
copy from custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/AgentProfileService.proto
index 2f59393..7d26877 100644
--- a/custos-core-services/agent-profile-core-service/src/main/proto/AgentProfileService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/AgentProfileService.proto
@@ -23,6 +23,8 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.agent.profile.service;
 
+option go_package = "./pb";
+
 message Agent {
     string id = 1;
     AgentStatus status = 2;
diff --git a/custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ClusterManagementService.proto
similarity index 97%
copy from custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ClusterManagementService.proto
index 9739d06..6c58702 100644
--- a/custos-core-services/cluster-management-core-service/src/main/proto/ClusterManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ClusterManagementService.proto
@@ -22,7 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.cluster.management.service;
-
+option go_package = "./pb";
 message GetServerCertificateRequest {
     string secretName = 1;
     string namespace = 2;
diff --git a/custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/CredentialStoreService.proto
similarity index 99%
copy from custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/CredentialStoreService.proto
index da6002b..691df79 100644
--- a/custos-core-services/credential-store-core-service/src/main/proto/CredentialStoreService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/CredentialStoreService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.credential.store.service;
+option go_package = "./pb";
 
 enum Type {
     CUSTOS = 0;
diff --git a/custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/FederatedAuthenticationService.proto
similarity index 99%
copy from custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/FederatedAuthenticationService.proto
index 900fb77..7da3d0c 100644
--- a/custos-core-services/federated-authentication-core-service/src/main/proto/FederatedAuthenticationService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/FederatedAuthenticationService.proto
@@ -23,6 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.federated.authentication.service;
 import "google/protobuf/struct.proto";
+option go_package = "./pb";
 
 enum InstitutionCacheType {
     WHITELIST = 0;
diff --git a/custos-integration-services/group-management-service-parent/group-management-service/src/main/proto/GroupManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/GroupManagementService.proto
similarity index 99%
copy from custos-integration-services/group-management-service-parent/group-management-service/src/main/proto/GroupManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/GroupManagementService.proto
index 8a556b7..df5d5bd 100644
--- a/custos-integration-services/group-management-service-parent/group-management-service/src/main/proto/GroupManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/GroupManagementService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.group.management.service;
+option go_package = "./pb";
 
 import "google/api/annotations.proto";
 import "UserProfileService.proto";
diff --git a/custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IamAdminService.proto
similarity index 99%
copy from custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IamAdminService.proto
index 77ff45b..30c3469 100644
--- a/custos-core-services/iam-admin-core-service/src/main/proto/IamAdminService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IamAdminService.proto
@@ -24,7 +24,7 @@ option java_multiple_files = true;
 package org.apache.custos.iam.service;
 
 import "google/protobuf/empty.proto";
-
+option go_package = "./pb";
 
 enum FederatedIDPs {
     CILOGON = 0;
diff --git a/custos-integration-services/identity-management-service-parent/identity-management-service/src/main/proto/IdentityManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IdentityManagementService.proto
similarity index 98%
copy from custos-integration-services/identity-management-service-parent/identity-management-service/src/main/proto/IdentityManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IdentityManagementService.proto
index 517d557..c08a828 100644
--- a/custos-integration-services/identity-management-service-parent/identity-management-service/src/main/proto/IdentityManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IdentityManagementService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.identity.management.service;
+option go_package = "./pb";
 
 import "google/api/annotations.proto";
 import "IdentityService.proto";
@@ -153,7 +154,7 @@ service IdentityManagementService {
     rpc isAgentAuthenticated(org.apache.custos.identity.service.AuthToken) returns (org.apache.custos.identity.service.IsAuthenticatedResponse) {
         option (google.api.http) = {
            post: "/identity-management/v1.0.0/agent/authentication/status"
-           body: "body"
+           body: "*"
          };
     }
 }
\ No newline at end of file
diff --git a/custos-core-services/identity-core-service/src/main/proto/IdentityService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IdentityService.proto
similarity index 99%
copy from custos-core-services/identity-core-service/src/main/proto/IdentityService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IdentityService.proto
index da94996..e6ac2ba 100644
--- a/custos-core-services/identity-core-service/src/main/proto/IdentityService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/IdentityService.proto
@@ -23,7 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.identity.service;
 import "google/protobuf/struct.proto";
-
+option go_package = "./pb";
 
 message AuthToken {
     string access_token = 1;
diff --git a/custos-integration-services/log-management-service-parent/log-management-service/src/main/proto/LogManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/LogManagementService.proto
similarity index 98%
copy from custos-integration-services/log-management-service-parent/log-management-service/src/main/proto/LogManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/LogManagementService.proto
index 25a5133..3b1c772 100644
--- a/custos-integration-services/log-management-service-parent/log-management-service/src/main/proto/LogManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/LogManagementService.proto
@@ -28,7 +28,7 @@ import "google/protobuf/empty.proto";
 import "google/protobuf/struct.proto";
 import "LoggingService.proto";
 
-
+option go_package = "./pb";
 
 service LogManagementService {
 
diff --git a/custos-core-services/custos-logging/src/main/proto/LoggingService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/LoggingService.proto
similarity index 98%
copy from custos-core-services/custos-logging/src/main/proto/LoggingService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/LoggingService.proto
index 889ca3d..7ab3fa5 100644
--- a/custos-core-services/custos-logging/src/main/proto/LoggingService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/LoggingService.proto
@@ -25,6 +25,8 @@ package org.apache.custos.logging.service;
 
 import "google/protobuf/empty.proto";
 
+option go_package = "./pb";
+
 
 message LogEvent {
     int64 created_time = 1;
diff --git a/custos-integration-services/resource-secret-management-service-parent/resource-secret-management-service/src/main/proto/ResourceSecretManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ResourceSecretManagementService.proto
similarity index 99%
copy from custos-integration-services/resource-secret-management-service-parent/resource-secret-management-service/src/main/proto/ResourceSecretManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ResourceSecretManagementService.proto
index 8089a62..f6d5c8b 100644
--- a/custos-integration-services/resource-secret-management-service-parent/resource-secret-management-service/src/main/proto/ResourceSecretManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ResourceSecretManagementService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.resource.secret.management.service;
+option go_package = "./pb";
 
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
diff --git a/custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ResourceSecretService.proto
similarity index 99%
copy from custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ResourceSecretService.proto
index fce978f..72c8800 100644
--- a/custos-core-services/resource-secret-core-service/src/main/proto/ResourceSecretService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/ResourceSecretService.proto
@@ -23,6 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.resource.secret.service;
 
+option go_package = "./pb";
 
 enum ResourceOwnerType {
     TENANT_USER = 0;
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
similarity index 99%
copy from custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
index 74e4ca5..594912f 100644
--- a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.sharing.management.service;
+option go_package = "./pb";
 
 import "SharingService.proto";
 import "google/api/annotations.proto";
diff --git a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
similarity index 99%
copy from custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
index fff95b9..fca0096 100644
--- a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
@@ -23,7 +23,7 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.custos.sharing.service;
 
-
+option go_package = "./pb";
 enum SearchCondition {
     EQUAL = 0;
     LIKE = 1;
diff --git a/custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/proto/TenantManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/TenantManagementService.proto
similarity index 95%
copy from custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/proto/TenantManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/TenantManagementService.proto
index f98032d..8d53a51 100644
--- a/custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/proto/TenantManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/TenantManagementService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.tenant.management.service;
+option go_package = "./pb";
 
 import "google/api/annotations.proto";
 import "TenantProfileService.proto";
@@ -208,17 +209,13 @@ service TenantManagementService {
 
     rpc getAllTenantsForUser (org.apache.custos.tenant.profile.service.GetAllTenantsForUserRequest) returns (org.apache.custos.tenant.profile.service.GetAllTenantsForUserResponse) {
         option (google.api.http) = {
-           get: "/tenant-management/v1.0.0/tenants/{requesterEmail}"
-        };
-    }
-    rpc getTenantStatusUpdateAuditTrail (org.apache.custos.tenant.profile.service.GetAuditTrailRequest) returns (org.apache.custos.tenant.profile.service.GetStatusUpdateAuditTrailResponse) {
-        option (google.api.http) = {
-           get: "/tenant-management/v1.0.0/audit/status/{tenantId}"
+           get: "/tenant-management/v1.0.0/tenants/{requester_email}"
         };
     }
+
     rpc getTenantAttributeUpdateAuditTrail (org.apache.custos.tenant.profile.service.GetAuditTrailRequest) returns (org.apache.custos.tenant.profile.service.GetAttributeUpdateAuditTrailResponse) {
         option (google.api.http) = {
-           get: "/tenant-management/v1.0.0/audit/attributes/{tenantId}"
+           get: "/tenant-management/v1.0.0/audit/attributes/{tenant_id}"
         };
     }
 
diff --git a/custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/TenantProfileService.proto
similarity index 99%
copy from custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/TenantProfileService.proto
index 6073bfc..2af0d86 100644
--- a/custos-core-services/tenant-profile-core-service/src/main/proto/TenantProfileService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/TenantProfileService.proto
@@ -22,6 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.tenant.profile.service;
+option go_package = "./pb";
 
 message Tenant {
     int64 tenant_id = 1;
diff --git a/custos-integration-services/user-management-service-parent/user-management-service/src/main/proto/UserManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserManagementService.proto
similarity index 99%
copy from custos-integration-services/user-management-service-parent/user-management-service/src/main/proto/UserManagementService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserManagementService.proto
index 1a47a91..a10b16b 100644
--- a/custos-integration-services/user-management-service-parent/user-management-service/src/main/proto/UserManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserManagementService.proto
@@ -22,7 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.user.management.service;
-
+option go_package = "./pb";
 import "google/api/annotations.proto";
 import "UserProfileService.proto";
 import "IamAdminService.proto";
@@ -94,7 +94,7 @@ service UserManagementService {
     rpc registerAndEnableUsers (org.apache.custos.iam.service.RegisterUsersRequest) returns (org.apache.custos.iam.service.RegisterUsersResponse) {
         option (google.api.http) = {
            post: "/user-management/v1.0.0/users"
-           body: "users"
+           body: "*"
          };
     }
 
@@ -134,7 +134,6 @@ service UserManagementService {
     rpc removeAdminPrivileges (org.apache.custos.iam.service.UserSearchRequest) returns (org.apache.custos.iam.service.OperationStatus) {
         option (google.api.http) = {
            delete: "/user-management/v1.0.0/user/admin"
-           body: "user"
          };
     }
 
@@ -183,7 +182,6 @@ service UserManagementService {
     rpc deleteUser (org.apache.custos.iam.service.UserSearchRequest) returns (org.apache.custos.iam.service.OperationStatus) {
         option (google.api.http) = {
            delete: "/user-management/v1.0.0/user"
-           body: "user"
          };
 
     }
diff --git a/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto
similarity index 99%
copy from custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
copy to custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto
index fb840ad..66197e6 100644
--- a/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto
@@ -22,7 +22,7 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 package org.apache.custos.user.profile.service;
-
+option go_package = "./pb";
 
 enum UserStatus {
     ACTIVE = 0;
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/agent-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/agent-management-service/swagger.json
new file mode 100644
index 0000000..1a6dc1c
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/agent-management-service/swagger.json
@@ -0,0 +1,830 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "AgentManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "AgentManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/agent-management/v1.0.0/agent": {
+      "post": {
+        "operationId": "AgentManagementService_registerAndEnableAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAgentRegistrationResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/serviceUserRepresentation"
+            }
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "access_token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/agent/activation/{id}": {
+      "post": {
+        "operationId": "AgentManagementService_enableAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/agent/attributes": {
+      "delete": {
+        "operationId": "AgentManagementService_deleteAgentAttributes",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "users",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "access_token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "agents",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "AgentManagementService_addAgentAttributes",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/agent/deactivation/{id}": {
+      "post": {
+        "operationId": "AgentManagementService_disableAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/agent/roles": {
+      "delete": {
+        "operationId": "AgentManagementService_deleteRolesFromAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "access_token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "AgentManagementService_addRolesToAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/agent/{id}": {
+      "get": {
+        "operationId": "AgentManagementService_getAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAgent"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "accessToken",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "AgentManagementService_deleteAgent",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "accessToken",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/agents": {
+      "get": {
+        "operationId": "AgentManagementService_getAllAgents",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllResourcesResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "resource_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "USER",
+              "AGENT"
+            ],
+            "default": "USER"
+          }
+        ],
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/db/synchronize": {
+      "post": {
+        "operationId": "AgentManagementService_synchronizeAgentDBs",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/enable": {
+      "post": {
+        "operationId": "AgentManagementService_enableAgents",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/protocol/mapper": {
+      "post": {
+        "operationId": "AgentManagementService_addProtocolMapper",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/roles": {
+      "post": {
+        "operationId": "AgentManagementService_addRolesToClient",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    },
+    "/agent-management/v1.0.0/token/configuration": {
+      "post": {
+        "operationId": "AgentManagementService_configureAgentClient",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "AgentManagementService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "serviceAgent": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "realm_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "attributes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceUserAttribute"
+          }
+        },
+        "isEnabled": {
+          "type": "boolean"
+        },
+        "creation_time": {
+          "type": "number",
+          "format": "double"
+        },
+        "last_modified_at": {
+          "type": "number",
+          "format": "double"
+        },
+        "client_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "serviceAgentRegistrationResponse": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "secret": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceClaimJSONTypes": {
+      "type": "string",
+      "enum": [
+        "STRING",
+        "LONG",
+        "INTEGER",
+        "BOOLEAN",
+        "JSON"
+      ],
+      "default": "STRING"
+    },
+    "serviceGetAllResourcesResponse": {
+      "type": "object",
+      "properties": {
+        "agents": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceAgent"
+          }
+        },
+        "users": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceUserRepresentation"
+          }
+        }
+      }
+    },
+    "serviceMapperTypes": {
+      "type": "string",
+      "enum": [
+        "USER_ATTRIBUTE",
+        "USER_REALM_ROLE",
+        "USER_CLIENT_ROLE"
+      ],
+      "default": "USER_ATTRIBUTE"
+    },
+    "serviceOperationStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    },
+    "serviceResourceTypes": {
+      "type": "string",
+      "enum": [
+        "USER",
+        "AGENT"
+      ],
+      "default": "USER"
+    },
+    "serviceRoleRepresentation": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string"
+        },
+        "description": {
+          "type": "string"
+        },
+        "composite": {
+          "type": "boolean"
+        },
+        "id": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceUserAttribute": {
+      "type": "object",
+      "properties": {
+        "key": {
+          "type": "string"
+        },
+        "values": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "serviceUserRepresentation": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "username": {
+          "type": "string"
+        },
+        "first_name": {
+          "type": "string"
+        },
+        "last_name": {
+          "type": "string"
+        },
+        "password": {
+          "type": "string"
+        },
+        "email": {
+          "type": "string"
+        },
+        "temporary_password": {
+          "type": "boolean"
+        },
+        "realm_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "client_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "attributes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceUserAttribute"
+          }
+        },
+        "state": {
+          "type": "string"
+        },
+        "creation_time": {
+          "type": "number",
+          "format": "double"
+        },
+        "last_login_at": {
+          "type": "number",
+          "format": "double"
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/cluster-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/cluster-management-service/swagger.json
new file mode 100644
index 0000000..11ea7fa
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/cluster-management-service/swagger.json
@@ -0,0 +1,59 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "ClusterManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "ClusterManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "serviceGetServerCertificateResponse": {
+      "type": "object",
+      "properties": {
+        "certificate": {
+          "type": "string"
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/group-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/group-management-service/swagger.json
new file mode 100644
index 0000000..0758adf
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/group-management-service/swagger.json
@@ -0,0 +1,2119 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "GroupManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "GroupManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/group-management/v1.0.0/group": {
+      "get": {
+        "operationId": "GroupManagementService_findGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroup"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.created_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.last_modified_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "GroupManagementService_createGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroup"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/group/membership": {
+      "delete": {
+        "operationId": "GroupManagementService_removeChildGroupFromParentGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "child_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "GroupManagementService_addChildGroupToParentGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/group/{id}": {
+      "delete": {
+        "operationId": "GroupManagementService_deleteGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.created_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.last_modified_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "GroupManagementService_updateGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroup"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/groups": {
+      "get": {
+        "operationId": "GroupManagementService_getAllGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllGroupsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.created_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.last_modified_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/groups/memberships": {
+      "get": {
+        "operationId": "GroupManagementService_getAllParentGroupsOfGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllGroupsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.created_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.last_modified_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/groups/memberships/child": {
+      "get": {
+        "operationId": "GroupManagementService_getAllChildGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllGroupsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.created_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.last_modified_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/keycloak/group": {
+      "get": {
+        "operationId": "GroupManagementService_findKeycloakGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroupRepresentation"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "accessToken",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.ownerId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/keycloak/group/{id}": {
+      "delete": {
+        "operationId": "GroupManagementService_deleteKeycloakGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "accessToken",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.ownerId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "GroupManagementService_updateKeycloakGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroupRepresentation"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/keycloak/groups": {
+      "get": {
+        "operationId": "GroupManagementService_getAllKeycloakGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroupsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "accessToken",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.ownerId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "GroupManagementService_createKeycloakGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGroupsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/keycloak/user/group/membership": {
+      "delete": {
+        "operationId": "GroupManagementService_removeUserFromKeycloakGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "accessToken",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "GroupManagementService_addUserToKeycloakGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/user/group/access": {
+      "get": {
+        "operationId": "GroupManagementService_hasAccess",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/user/group/membership": {
+      "delete": {
+        "operationId": "GroupManagementService_removeUserFromGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "clientSec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "GroupManagementService_addUserToGroup",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "GroupManagementService_changeUserMembershipType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/user/group/membership/type": {
+      "delete": {
+        "operationId": "GroupManagementService_removeUserGroupMembershipType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "GroupManagementService_addGroupMembershipType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/profileserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/user/group/memberships": {
+      "get": {
+        "operationId": "GroupManagementService_getAllGroupsOfUser",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllGroupsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "profile.username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "profile.email",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "profile.first_name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "profile.last_name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "profile.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "profile.status",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "ACTIVE",
+              "CONFIRMED",
+              "APPROVED",
+              "DELETED",
+              "DUPLICATE",
+              "GRACE_PERIOD",
+              "INVITED",
+              "DENIED",
+              "PENDING",
+              "PENDING_APPROVAL",
+              "PENDING_CONFIRMATION",
+              "SUSPENDED",
+              "DECLINED",
+              "EXPIRED"
+            ],
+            "default": "ACTIVE"
+          },
+          {
+            "name": "profile.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "profile.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "profile.last_modified_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "profile.type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "END_USER",
+              "COMMUNITY"
+            ],
+            "default": "END_USER"
+          },
+          {
+            "name": "profile.membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    },
+    "/group-management/v1.0.0/user/group/memberships/child": {
+      "get": {
+        "operationId": "GroupManagementService_getAllChildUsers",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllUserProfilesResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.realm_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.client_roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "group.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.created_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.last_modified_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "group.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "group.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "membership_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "OWNER",
+              "ADMIN",
+              "MEMBER"
+            ],
+            "default": "OWNER"
+          },
+          {
+            "name": "id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "GroupManagementService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "custosiamserviceUserAttribute": {
+      "type": "object",
+      "properties": {
+        "key": {
+          "type": "string"
+        },
+        "values": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "googlerpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "profileserviceStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "serviceDefaultGroupMembershipTypes": {
+      "type": "string",
+      "enum": [
+        "OWNER",
+        "ADMIN",
+        "MEMBER"
+      ],
+      "default": "OWNER"
+    },
+    "serviceGetAllGroupsResponse": {
+      "type": "object",
+      "properties": {
+        "groups": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceGroup"
+          }
+        }
+      }
+    },
+    "serviceGetAllUserProfilesResponse": {
+      "type": "object",
+      "properties": {
+        "profiles": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceUserProfile"
+          }
+        }
+      }
+    },
+    "serviceGroup": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "realm_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "client_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "parent_id": {
+          "type": "string"
+        },
+        "created_time": {
+          "type": "string",
+          "format": "int64"
+        },
+        "last_modified_time": {
+          "type": "string",
+          "format": "int64"
+        },
+        "attributes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceGroupAttribute"
+          }
+        },
+        "description": {
+          "type": "string"
+        },
+        "owner_id": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceGroupAttribute": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string",
+          "format": "int64"
+        },
+        "key": {
+          "type": "string"
+        },
+        "value": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "serviceGroupRepresentation": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string"
+        },
+        "id": {
+          "type": "string"
+        },
+        "realm_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "client_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "attributes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/custosiamserviceUserAttribute"
+          }
+        },
+        "users": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceUserRepresentation"
+          }
+        },
+        "sub_groups": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceGroupRepresentation"
+          }
+        },
+        "description": {
+          "type": "string"
+        },
+        "ownerId": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceGroupsResponse": {
+      "type": "object",
+      "properties": {
+        "groups": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceGroupRepresentation"
+          }
+        }
+      }
+    },
+    "serviceOperationStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    },
+    "serviceUserProfile": {
+      "type": "object",
+      "properties": {
+        "username": {
+          "type": "string"
+        },
+        "email": {
+          "type": "string"
+        },
+        "first_name": {
+          "type": "string"
+        },
+        "last_name": {
+          "type": "string"
+        },
+        "created_at": {
+          "type": "string",
+          "format": "int64"
+        },
+        "status": {
+          "$ref": "#/definitions/serviceUserStatus"
+        },
+        "attributes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/userprofileserviceUserAttribute"
+          }
+        },
+        "client_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "realm_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "last_modified_at": {
+          "type": "string",
+          "format": "int64"
+        },
+        "type": {
+          "$ref": "#/definitions/serviceUserTypes"
+        },
+        "membership_type": {
+          "$ref": "#/definitions/serviceDefaultGroupMembershipTypes"
+        }
+      }
+    },
+    "serviceUserRepresentation": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "username": {
+          "type": "string"
+        },
+        "first_name": {
+          "type": "string"
+        },
+        "last_name": {
+          "type": "string"
+        },
+        "password": {
+          "type": "string"
+        },
+        "email": {
+          "type": "string"
+        },
+        "temporary_password": {
+          "type": "boolean"
+        },
+        "realm_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "client_roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "attributes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/custosiamserviceUserAttribute"
+          }
+        },
+        "state": {
+          "type": "string"
+        },
+        "creation_time": {
+          "type": "number",
+          "format": "double"
+        },
+        "last_login_at": {
+          "type": "number",
+          "format": "double"
+        }
+      }
+    },
+    "serviceUserStatus": {
+      "type": "string",
+      "enum": [
+        "ACTIVE",
+        "CONFIRMED",
+        "APPROVED",
+        "DELETED",
+        "DUPLICATE",
+        "GRACE_PERIOD",
+        "INVITED",
+        "DENIED",
+        "PENDING",
+        "PENDING_APPROVAL",
+        "PENDING_CONFIRMATION",
+        "SUSPENDED",
+        "DECLINED",
+        "EXPIRED"
+      ],
+      "default": "ACTIVE"
+    },
+    "serviceUserTypes": {
+      "type": "string",
+      "enum": [
+        "END_USER",
+        "COMMUNITY"
+      ],
+      "default": "END_USER"
+    },
+    "userprofileserviceUserAttribute": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string",
+          "format": "int64"
+        },
+        "key": {
+          "type": "string"
+        },
+        "value": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/identity-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/identity-management-service/swagger.json
new file mode 100644
index 0000000..e172c30
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/identity-management-service/swagger.json
@@ -0,0 +1,659 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "IdentityManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "IdentityManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/identity-management/v1.0.0/.well-known/openid-configuration": {
+      "get": {
+        "operationId": "IdentityManagementService_getOIDCConfiguration",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "type": "object"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/account/token": {
+      "get": {
+        "operationId": "IdentityManagementService_getUserManagementServiceAccountAccessToken",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAuthToken"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/agent/authentication/status": {
+      "post": {
+        "operationId": "IdentityManagementService_isAgentAuthenticated",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceIsAuthenticatedResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/serviceAuthToken"
+            }
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/agent/logout/{client_id}": {
+      "post": {
+        "operationId": "IdentityManagementService_endAgentSession",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/custosidentityserviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/custosidentityserviceEndSessionRequest"
+            }
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/agent/token/{client_id}": {
+      "post": {
+        "operationId": "IdentityManagementService_getAgentToken",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "type": "object"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/authenticate": {
+      "post": {
+        "operationId": "IdentityManagementService_authenticate",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAuthToken"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/authenticate/status": {
+      "get": {
+        "operationId": "IdentityManagementService_isAuthenticated",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceIsAuthenticatedResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "access_token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/authorize": {
+      "get": {
+        "operationId": "IdentityManagementService_authorize",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/identitymanagementserviceAuthorizationResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "redirect_uri",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "response_type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "scope",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "state",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/credentials": {
+      "get": {
+        "operationId": "IdentityManagementService_getCredentials",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceCredentials"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.iam_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.iam_client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.ci_logon_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.ci_logon_client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.custos_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.custos_client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.custos_client_id_issued_at",
+            "in": "query",
+            "required": false,
+            "type": "number",
+            "format": "double"
+          },
+          {
+            "name": "credentials.custos_client_secret_expired_at",
+            "in": "query",
+            "required": false,
+            "type": "number",
+            "format": "double"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/token": {
+      "post": {
+        "operationId": "IdentityManagementService_token",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "type": "object"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/user": {
+      "get": {
+        "operationId": "IdentityManagementService_getUser",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceUser"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "access_token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    },
+    "/identity-management/v1.0.0/user/logout": {
+      "post": {
+        "operationId": "IdentityManagementService_endUserSession",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/custosidentityserviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/custosidentityserviceEndSessionRequest"
+            }
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "IdentityManagementService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "custosidentityserviceEndSessionRequest": {
+      "type": "object",
+      "properties": {
+        "client_id": {
+          "type": "string"
+        },
+        "client_secret": {
+          "type": "string"
+        },
+        "tenant_id": {
+          "type": "string",
+          "format": "int64"
+        },
+        "refresh_token": {
+          "type": "string"
+        }
+      }
+    },
+    "custosidentityserviceOperationStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    },
+    "identitymanagementserviceAuthorizationResponse": {
+      "type": "object",
+      "properties": {
+        "loginURI": {
+          "type": "string"
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string",
+          "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the c [...]
+        },
+        "value": {
+          "type": "string",
+          "format": "byte",
+          "description": "Must be a valid serialized protocol buffer of the above specified type."
+        }
+      },
+      "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n    Foo foo = ...;\n    Any any;\n    any.PackFrom(foo);\n    ...\n    if (any.UnpackTo(\u0026foo)) {\n      ...\n    }\n\nExample 2: Pack an [...]
+    },
+    "protobufNullValue": {
+      "type": "string",
+      "enum": [
+        "NULL_VALUE"
+      ],
+      "default": "NULL_VALUE",
+      "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value."
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "serviceAuthToken": {
+      "type": "object",
+      "properties": {
+        "access_token": {
+          "type": "string"
+        },
+        "claims": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceClaim"
+          }
+        }
+      }
+    },
+    "serviceClaim": {
+      "type": "object",
+      "properties": {
+        "key": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceCredentials": {
+      "type": "object",
+      "properties": {
+        "iam_client_id": {
+          "type": "string"
+        },
+        "iam_client_secret": {
+          "type": "string"
+        },
+        "ci_logon_client_id": {
+          "type": "string"
+        },
+        "ci_logon_client_secret": {
+          "type": "string"
+        },
+        "custos_client_id": {
+          "type": "string"
+        },
+        "custos_client_secret": {
+          "type": "string"
+        },
+        "custos_client_id_issued_at": {
+          "type": "number",
+          "format": "double"
+        },
+        "custos_client_secret_expired_at": {
+          "type": "number",
+          "format": "double"
+        }
+      }
+    },
+    "serviceIsAuthenticatedResponse": {
+      "type": "object",
+      "properties": {
+        "authenticated": {
+          "type": "boolean"
+        }
+      }
+    },
+    "serviceUser": {
+      "type": "object",
+      "properties": {
+        "sub": {
+          "type": "string"
+        },
+        "full_name": {
+          "type": "string"
+        },
+        "first_name": {
+          "type": "string"
+        },
+        "last_name": {
+          "type": "string"
+        },
+        "email_address": {
+          "type": "string"
+        },
+        "username": {
+          "type": "string"
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/log-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/log-management-service/swagger.json
new file mode 100644
index 0000000..4158f8d
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/log-management-service/swagger.json
@@ -0,0 +1,245 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "LogManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "LogManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/log-management/v1.0.0/logs": {
+      "get": {
+        "operationId": "LogManagementService_getLogEvents",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceLogEvents"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "start_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "end_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "remote_ip",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "service_name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "event_type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "offset",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "limit",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "LogManagementService"
+        ]
+      }
+    },
+    "/log-management/v1.0.0/status": {
+      "get": {
+        "operationId": "LogManagementService_isLogEnabled",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/loggingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "LogManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "LogManagementService_enable",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/loggingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "LogManagementService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "googlerpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "loggingserviceStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "serviceLogEvent": {
+      "type": "object",
+      "properties": {
+        "created_time": {
+          "type": "string",
+          "format": "int64"
+        },
+        "service_name": {
+          "type": "string"
+        },
+        "event_type": {
+          "type": "string"
+        },
+        "username": {
+          "type": "string"
+        },
+        "client_id": {
+          "type": "string"
+        },
+        "tenant_id": {
+          "type": "string",
+          "format": "int64"
+        },
+        "external_ip": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceLogEvents": {
+      "type": "object",
+      "properties": {
+        "events": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceLogEvent"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/resource-secret-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/resource-secret-management-service/swagger.json
new file mode 100644
index 0000000..3bb8086
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/resource-secret-management-service/swagger.json
@@ -0,0 +1,1792 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "ResourceSecretManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "ResourceSecretManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/resource-secret-management/v1.0.0/openid-connect/certs": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getJWKS",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "type": "object"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getSecret",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSecretMetadata"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "metadata.owner_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "TENANT_USER",
+              "CUSTOS",
+              "TENANT"
+            ],
+            "default": "TENANT_USER"
+          },
+          {
+            "name": "metadata.resource_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SERVER_CERTIFICATE",
+              "JWT_SIGNING_CERTIFICATE",
+              "VAULT_CREDENTIAL",
+              "VM",
+              "ACCOUNT",
+              "OTHER",
+              "SCP",
+              "S3",
+              "BOX",
+              "AZURE",
+              "GCS",
+              "DROPBOX",
+              "FTP"
+            ],
+            "default": "SERVER_CERTIFICATE"
+          },
+          {
+            "name": "metadata.source",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "KUBE",
+              "LOCAL",
+              "EXTERNAL",
+              "LETSENCRYPT"
+            ],
+            "default": "KUBE"
+          },
+          {
+            "name": "metadata.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SSH",
+              "PASSWORD",
+              "X509_CERTIFICATE",
+              "RAW_DATA",
+              "KV",
+              "CREDENTIAL_MAP"
+            ],
+            "default": "SSH"
+          },
+          {
+            "name": "metadata.tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.persisted_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/certificate": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getCertificateCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceCertificateCredential"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "ResourceSecretManagementService_deleteCertificateCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "ResourceSecretManagementService_addCertificateCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAddResourceCredentialResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/kv": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getKVCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceKVCredential"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "key",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.owner_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "TENANT_USER",
+              "CUSTOS",
+              "TENANT"
+            ],
+            "default": "TENANT_USER"
+          },
+          {
+            "name": "metadata.resource_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SERVER_CERTIFICATE",
+              "JWT_SIGNING_CERTIFICATE",
+              "VAULT_CREDENTIAL",
+              "VM",
+              "ACCOUNT",
+              "OTHER",
+              "SCP",
+              "S3",
+              "BOX",
+              "AZURE",
+              "GCS",
+              "DROPBOX",
+              "FTP"
+            ],
+            "default": "SERVER_CERTIFICATE"
+          },
+          {
+            "name": "metadata.source",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "KUBE",
+              "LOCAL",
+              "EXTERNAL",
+              "LETSENCRYPT"
+            ],
+            "default": "KUBE"
+          },
+          {
+            "name": "metadata.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SSH",
+              "PASSWORD",
+              "X509_CERTIFICATE",
+              "RAW_DATA",
+              "KV",
+              "CREDENTIAL_MAP"
+            ],
+            "default": "SSH"
+          },
+          {
+            "name": "metadata.tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.persisted_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "ResourceSecretManagementService_deleteKVCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "key",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.owner_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "TENANT_USER",
+              "CUSTOS",
+              "TENANT"
+            ],
+            "default": "TENANT_USER"
+          },
+          {
+            "name": "metadata.resource_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SERVER_CERTIFICATE",
+              "JWT_SIGNING_CERTIFICATE",
+              "VAULT_CREDENTIAL",
+              "VM",
+              "ACCOUNT",
+              "OTHER",
+              "SCP",
+              "S3",
+              "BOX",
+              "AZURE",
+              "GCS",
+              "DROPBOX",
+              "FTP"
+            ],
+            "default": "SERVER_CERTIFICATE"
+          },
+          {
+            "name": "metadata.source",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "KUBE",
+              "LOCAL",
+              "EXTERNAL",
+              "LETSENCRYPT"
+            ],
+            "default": "KUBE"
+          },
+          {
+            "name": "metadata.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SSH",
+              "PASSWORD",
+              "X509_CERTIFICATE",
+              "RAW_DATA",
+              "KV",
+              "CREDENTIAL_MAP"
+            ],
+            "default": "SSH"
+          },
+          {
+            "name": "metadata.tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.persisted_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "ResourceSecretManagementService_addKVCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "ResourceSecretManagementService_updateKVCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/map": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getCredentialMap",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceCredentialMap"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "metadata.owner_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "TENANT_USER",
+              "CUSTOS",
+              "TENANT"
+            ],
+            "default": "TENANT_USER"
+          },
+          {
+            "name": "metadata.resource_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SERVER_CERTIFICATE",
+              "JWT_SIGNING_CERTIFICATE",
+              "VAULT_CREDENTIAL",
+              "VM",
+              "ACCOUNT",
+              "OTHER",
+              "SCP",
+              "S3",
+              "BOX",
+              "AZURE",
+              "GCS",
+              "DROPBOX",
+              "FTP"
+            ],
+            "default": "SERVER_CERTIFICATE"
+          },
+          {
+            "name": "metadata.source",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "KUBE",
+              "LOCAL",
+              "EXTERNAL",
+              "LETSENCRYPT"
+            ],
+            "default": "KUBE"
+          },
+          {
+            "name": "metadata.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SSH",
+              "PASSWORD",
+              "X509_CERTIFICATE",
+              "RAW_DATA",
+              "KV",
+              "CREDENTIAL_MAP"
+            ],
+            "default": "SSH"
+          },
+          {
+            "name": "metadata.tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.persisted_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "ResourceSecretManagementService_deleteCredentialMap",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "metadata.owner_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "TENANT_USER",
+              "CUSTOS",
+              "TENANT"
+            ],
+            "default": "TENANT_USER"
+          },
+          {
+            "name": "metadata.resource_type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SERVER_CERTIFICATE",
+              "JWT_SIGNING_CERTIFICATE",
+              "VAULT_CREDENTIAL",
+              "VM",
+              "ACCOUNT",
+              "OTHER",
+              "SCP",
+              "S3",
+              "BOX",
+              "AZURE",
+              "GCS",
+              "DROPBOX",
+              "FTP"
+            ],
+            "default": "SERVER_CERTIFICATE"
+          },
+          {
+            "name": "metadata.source",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "KUBE",
+              "LOCAL",
+              "EXTERNAL",
+              "LETSENCRYPT"
+            ],
+            "default": "KUBE"
+          },
+          {
+            "name": "metadata.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.value",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SSH",
+              "PASSWORD",
+              "X509_CERTIFICATE",
+              "RAW_DATA",
+              "KV",
+              "CREDENTIAL_MAP"
+            ],
+            "default": "SSH"
+          },
+          {
+            "name": "metadata.tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.persisted_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "metadata.token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "metadata.client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "ResourceSecretManagementService_addCredentialMap",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAddResourceCredentialResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "ResourceSecretManagementService_updateCredentialMap",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/password": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getPasswordCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/servicePasswordCredential"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "ResourceSecretManagementService_deletePWDCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "ResourceSecretManagementService_addPasswordCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAddResourceCredentialResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/ssh": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getSSHCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSSHCredential"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "ResourceSecretManagementService_deleteSSHCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "ResourceSecretManagementService_addSSHCredential",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceAddResourceCredentialResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/summaries": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getAllResourceCredentialSummaries",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceResourceCredentialSummaries"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "SERVER_CERTIFICATE",
+              "JWT_SIGNING_CERTIFICATE",
+              "VAULT_CREDENTIAL",
+              "VM",
+              "ACCOUNT",
+              "OTHER",
+              "SCP",
+              "S3",
+              "BOX",
+              "AZURE",
+              "GCS",
+              "DROPBOX",
+              "FTP"
+            ],
+            "default": "SERVER_CERTIFICATE"
+          },
+          {
+            "name": "accessible_tokens",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "all_types",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    },
+    "/resource-secret-management/v1.0.0/secret/summary": {
+      "get": {
+        "operationId": "ResourceSecretManagementService_getResourceCredentialSummary",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSecretMetadata"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenantId",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "token",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "performed_by",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "use_shamirs_secret_sharing_with_encryption",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "num_of_shares",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "threshold",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          }
+        ],
+        "tags": [
+          "ResourceSecretManagementService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "protobufNullValue": {
+      "type": "string",
+      "enum": [
+        "NULL_VALUE"
+      ],
+      "default": "NULL_VALUE",
+      "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value."
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "serviceAddResourceCredentialResponse": {
+      "type": "object",
+      "properties": {
+        "token": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceCertificateCredential": {
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "#/definitions/serviceSecretMetadata"
+        },
+        "x509_cert": {
+          "type": "string"
+        },
+        "not_after": {
+          "type": "string"
+        },
+        "private_key": {
+          "type": "string"
+        },
+        "life_time": {
+          "type": "string",
+          "format": "int64"
+        },
+        "not_before": {
+          "type": "string"
+        },
+        "use_shamirs_secret_sharing_with_encryption": {
+          "type": "boolean"
+        },
+        "num_of_shares": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "threshold": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "private_key_shares": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "format": "byte"
+          }
+        }
+      }
+    },
+    "serviceCredentialMap": {
+      "type": "object",
+      "properties": {
+        "credential_map": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "metadata": {
+          "$ref": "#/definitions/serviceSecretMetadata"
+        }
+      }
+    },
+    "serviceKVCredential": {
+      "type": "object",
+      "properties": {
+        "key": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string"
+        },
+        "metadata": {
+          "$ref": "#/definitions/serviceSecretMetadata"
+        },
+        "token": {
+          "type": "string"
+        }
+      }
+    },
+    "servicePasswordCredential": {
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "#/definitions/serviceSecretMetadata"
+        },
+        "password": {
+          "type": "string"
+        },
+        "use_shamirs_secret_sharing_with_encryption": {
+          "type": "boolean"
+        },
+        "num_of_shares": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "threshold": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "secret_shares": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "format": "byte"
+          }
+        },
+        "userId": {
+          "type": "string"
+        }
+      }
+    },
+    "serviceResourceCredentialOperationStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    },
+    "serviceResourceCredentialSummaries": {
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceSecretMetadata"
+          }
+        }
+      }
+    },
+    "serviceResourceOwnerType": {
+      "type": "string",
+      "enum": [
+        "TENANT_USER",
+        "CUSTOS",
+        "TENANT"
+      ],
+      "default": "TENANT_USER"
+    },
+    "serviceResourceSecretType": {
+      "type": "string",
+      "enum": [
+        "SSH",
+        "PASSWORD",
+        "X509_CERTIFICATE",
+        "RAW_DATA",
+        "KV",
+        "CREDENTIAL_MAP"
+      ],
+      "default": "SSH"
+    },
+    "serviceResourceSource": {
+      "type": "string",
+      "enum": [
+        "KUBE",
+        "LOCAL",
+        "EXTERNAL",
+        "LETSENCRYPT"
+      ],
+      "default": "KUBE"
+    },
+    "serviceResourceType": {
+      "type": "string",
+      "enum": [
+        "SERVER_CERTIFICATE",
+        "JWT_SIGNING_CERTIFICATE",
+        "VAULT_CREDENTIAL",
+        "VM",
+        "ACCOUNT",
+        "OTHER",
+        "SCP",
+        "S3",
+        "BOX",
+        "AZURE",
+        "GCS",
+        "DROPBOX",
+        "FTP"
+      ],
+      "default": "SERVER_CERTIFICATE"
+    },
+    "serviceSSHCredential": {
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "#/definitions/serviceSecretMetadata"
+        },
+        "passphrase": {
+          "type": "string"
+        },
+        "public_key": {
+          "type": "string"
+        },
+        "private_key": {
+          "type": "string"
+        },
+        "use_shamirs_secret_sharing_with_encryption": {
+          "type": "boolean"
+        },
+        "num_of_shares": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "threshold": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "private_key_shares": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "format": "byte"
+          }
+        }
+      }
+    },
+    "serviceSecretMetadata": {
+      "type": "object",
+      "properties": {
+        "owner_type": {
+          "$ref": "#/definitions/serviceResourceOwnerType"
+        },
+        "resource_type": {
+          "$ref": "#/definitions/serviceResourceType"
+        },
+        "source": {
+          "$ref": "#/definitions/serviceResourceSource"
+        },
+        "name": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string"
+        },
+        "type": {
+          "$ref": "#/definitions/serviceResourceSecretType"
+        },
+        "tenantId": {
+          "type": "string",
+          "format": "int64"
+        },
+        "owner_id": {
+          "type": "string"
+        },
+        "persisted_time": {
+          "type": "string",
+          "format": "int64"
+        },
+        "token": {
+          "type": "string"
+        },
+        "description": {
+          "type": "string"
+        },
+        "client_id": {
+          "type": "string"
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/sharing-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/sharing-management-service/swagger.json
new file mode 100644
index 0000000..7a6cd12
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/sharing-management-service/swagger.json
@@ -0,0 +1,2390 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "SharingManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "SharingManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/sharing-management/v1.0.0/entities": {
+      "post": {
+        "operationId": "SharingManagementService_searchEntities",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceEntities"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/entity": {
+      "get": {
+        "operationId": "SharingManagementService_getEntity",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceEntity"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "SharingManagementService_deleteEntity",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "SharingManagementService_createEntity",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "SharingManagementService_updateEntity",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/entity/existence": {
+      "get": {
+        "operationId": "SharingManagementService_isEntityExists",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/entity/type": {
+      "get": {
+        "operationId": "SharingManagementService_getEntityType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceEntityType"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "SharingManagementService_deleteEntityType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "SharingManagementService_createEntityType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "SharingManagementService_updateEntityType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/entity/types": {
+      "get": {
+        "operationId": "SharingManagementService_getEntityTypes",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceEntityTypes"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "offset",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "limit",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "associating_ids",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/entity/user/access": {
+      "get": {
+        "operationId": "SharingManagementService_userHasAccess",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/groups/share": {
+      "get": {
+        "operationId": "SharingManagementService_getListOfSharedGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSharedOwners"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "SharingManagementService_revokeEntitySharingFromGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "SharingManagementService_shareEntityWithGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/groups/share/direct": {
+      "get": {
+        "operationId": "SharingManagementService_getListOfDirectlySharedGroups",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSharedOwners"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/permission/type": {
+      "get": {
+        "operationId": "SharingManagementService_getPermissionType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/servicePermissionType"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "SharingManagementService_deletePermissionType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "SharingManagementService_createPermissionType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "put": {
+        "operationId": "SharingManagementService_updatePermissionType",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/permission/types": {
+      "get": {
+        "operationId": "SharingManagementService_getPermissionTypes",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/servicePermissionTypes"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "offset",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "limit",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "associating_ids",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/users/share": {
+      "get": {
+        "operationId": "SharingManagementService_getListOfSharedUsers",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSharedOwners"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "SharingManagementService_revokeEntitySharingFromUsers",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "SharingManagementService_shareEntityWithUsers",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/sharingserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    },
+    "/sharing-management/v1.0.0/users/share/direct": {
+      "get": {
+        "operationId": "SharingManagementService_getListOfDirectlySharedUsers",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceSharedOwners"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.owner_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.binary_data",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "byte"
+          },
+          {
+            "name": "entity.full_text",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "entity.original_creation_time",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "entity.shared_count",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "permission_type.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.description",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "permission_type.created_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "permission_type.updated_at",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "owner_id",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "cascade",
+            "in": "query",
+            "required": false,
+            "type": "boolean"
+          },
+          {
+            "name": "client_sec",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "SharingManagementService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "googlerpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "type_url": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "serviceEntities": {
+      "type": "object",
+      "properties": {
+        "entity_array": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceEntity"
+          }
+        }
+      }
+    },
+    "serviceEntity": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "type": {
+          "type": "string"
+        },
+        "owner_id": {
+          "type": "string"
+        },
+        "parent_id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "description": {
+          "type": "string"
+        },
+        "binary_data": {
+          "type": "string",
+          "format": "byte"
+        },
+        "full_text": {
+          "type": "string"
+        },
+        "original_creation_time": {
+          "type": "string",
+          "format": "int64"
+        },
+        "created_at": {
+          "type": "string",
+          "format": "int64"
+        },
+        "updated_at": {
+          "type": "string",
+          "format": "int64"
+        },
+        "shared_count": {
+          "type": "integer",
+          "format": "int32"
+        }
+      }
+    },
+    "serviceEntitySearchField": {
+      "type": "string",
+      "enum": [
+        "NAME",
+        "DESCRIPTION",
+        "ID",
+        "FULL_TEXT",
+        "OWNER_ID",
+        "CREATED_AT",
+        "LAST_MODIFIED_AT",
+        "ENTITY_TYPE_ID",
+        "PARENT_ID",
+        "SHARED_COUNT",
+        "PERMISSION_TYPE_ID"
+      ],
+      "default": "NAME"
+    },
+    "serviceEntityType": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "description": {
+          "type": "string"
+        },
+        "created_at": {
+          "type": "string",
+          "format": "int64"
+        },
+        "updated_at": {
+          "type": "string",
+          "format": "int64"
+        }
+      }
+    },
+    "serviceEntityTypes": {
+      "type": "object",
+      "properties": {
+        "types": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/serviceEntityType"
+          }
+        }
+      }
+    },
+    "servicePermissionType": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "description": {
+          "type": "string"
+        },
+        "created_at": {
+          "type": "string",
+          "format": "int64"
+        },
+        "updated_at": {
+          "type": "string",
+          "format": "int64"
+        }
+      }
+    },
+    "servicePermissionTypes": {
+      "type": "object",
+      "properties": {
+        "types": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/servicePermissionType"
+          }
+        }
+      }
+    },
+    "serviceSearchCondition": {
+      "type": "string",
+      "enum": [
+        "EQUAL",
+        "LIKE",
+        "GTE",
+        "LTE",
+        "NOT"
+      ],
+      "default": "EQUAL"
+    },
+    "serviceSearchCriteria": {
+      "type": "object",
+      "properties": {
+        "search_field": {
+          "$ref": "#/definitions/serviceEntitySearchField"
+        },
+        "value": {
+          "type": "string"
+        },
+        "condition": {
+          "$ref": "#/definitions/serviceSearchCondition"
+        }
+      }
+    },
+    "serviceSharedOwners": {
+      "type": "object",
+      "properties": {
+        "owner_ids": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "sharingserviceStatus": {
+      "type": "object",
+      "properties": {
+        "status": {
+          "type": "boolean"
+        }
+      }
+    }
+  }
+}
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/tenant-management-service/swagger.json b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/tenant-management-service/swagger.json
new file mode 100644
index 0000000..316e452
--- /dev/null
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/static/swagger-apis/tenant-management-service/swagger.json
@@ -0,0 +1,1660 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "TenantManagementService.proto",
+    "version": "version not set"
+  },
+  "tags": [
+    {
+      "name": "TenantManagementService"
+    }
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/tenant-management/v1.0.0/audit/attributes/{tenant_id}": {
+      "get": {
+        "operationId": "TenantManagementService_getTenantAttributeUpdateAuditTrail",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAttributeUpdateAuditTrailResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "path",
+            "required": true,
+            "type": "string",
+            "format": "int64"
+          }
+        ],
+        "tags": [
+          "TenantManagementService"
+        ]
+      }
+    },
+    "/tenant-management/v1.0.0/cache/institutions/CILogon": {
+      "get": {
+        "operationId": "TenantManagementService_getFromCache",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetInstitutionsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "institution_ids",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "WHITELIST",
+              "BACKLIST"
+            ],
+            "default": "WHITELIST"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "TenantManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "TenantManagementService_removeFromCache",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/authenticationserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "institution_ids",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "WHITELIST",
+              "BACKLIST"
+            ],
+            "default": "WHITELIST"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "TenantManagementService"
+        ]
+      },
+      "post": {
+        "operationId": "TenantManagementService_addToCache",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/authenticationserviceStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "TenantManagementService"
+        ]
+      }
+    },
+    "/tenant-management/v1.0.0/child/tenants": {
+      "get": {
+        "operationId": "TenantManagementService_getChildTenants",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetAllTenantsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "offset",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "limit",
+            "in": "query",
+            "required": false,
+            "type": "integer",
+            "format": "int32"
+          },
+          {
+            "name": "parent_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "status",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "REQUESTED",
+              "APPROVED",
+              "DENIED",
+              "CANCELLED",
+              "ACTIVE",
+              "DEACTIVATED"
+            ],
+            "default": "REQUESTED"
+          },
+          {
+            "name": "requester_email",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "parent_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "TenantManagementService"
+        ]
+      }
+    },
+    "/tenant-management/v1.0.0/events": {
+      "post": {
+        "operationId": "TenantManagementService_configureEventPersistence",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceOperationStatus"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "tags": [
+          "TenantManagementService"
+        ]
+      }
+    },
+    "/tenant-management/v1.0.0/institutions/CILogon": {
+      "get": {
+        "operationId": "TenantManagementService_getInstitutions",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceGetInstitutionsResponse"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "institution_ids",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "type",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "WHITELIST",
+              "BACKLIST"
+            ],
+            "default": "WHITELIST"
+          },
+          {
+            "name": "performedBy",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "TenantManagementService"
+        ]
+      }
+    },
+    "/tenant-management/v1.0.0/oauth2/tenant": {
+      "get": {
+        "operationId": "TenantManagementService_getTenant",
+        "responses": {
+          "200": {
+            "description": "A successful response.",
+            "schema": {
+              "$ref": "#/definitions/serviceTenant"
+            }
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/googlerpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "tenant.tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "tenant.client_name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.requester_email",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.admin_first_name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.admin_last_name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.admin_email",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.admin_username",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.admin_password",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.tenant_status",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "enum": [
+              "REQUESTED",
+              "APPROVED",
+              "DENIED",
+              "CANCELLED",
+              "ACTIVE",
+              "DEACTIVATED"
+            ],
+            "default": "REQUESTED"
+          },
+          {
+            "name": "tenant.contacts",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "tenant.redirect_uris",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "tenant.client_uri",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.scope",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.domain",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.comment",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.logo_uri",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.parent_tenant_id",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "tenant.application_type",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.token_endpoint_auth_method",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.jwks_uri",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.example_extension_parameter",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.tos_uri",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.policy_uri",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.software_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.software_version",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "tenant.refesh_token_lifetime",
+            "in": "query",
+            "required": false,
+            "type": "string",
+            "format": "int64"
+          },
+          {
+            "name": "tenant.client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.iam_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.iam_client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.ci_logon_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.ci_logon_client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.custos_client_id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.custos_client_secret",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "credentials.custos_client_id_issued_at",
+            "in": "query",
+            "required": false,
+            "type": "number",
+            "format": "double"
+          },
+          {
+            "name": "credentials.custos_client_secret_expired_at",
+            "in": "query",
+            "required": false,
+            "type": "number",
+            "format": "double"
+          }
+        ],
+        "tags": [
+          "TenantManagementService"
+        ]
+      },
+      "delete": {
+        "operationId": "TenantManagementService_deleteTenant",
+        "responses": {
... 3228 lines suppressed ...