diff --git a/README.md b/README.md
index 4fe12ff..ea061ce 100644
--- a/README.md
+++ b/README.md
@@ -88,3 +88,7 @@
 Clamp uses logback framework to generate logs. The logback.xml file cand be found under the [src/main/resources/ folder](src/main/resources). 
 
 With the default log settings, all logs will be generated into console and into root.log file under the Clamp root folder. The root.log file is not allowed to be appended, thus restarting the clamp will result in cleaning of the old log files.
+
+### Api
+
+You can see the swagger definition for the jaxrs apis at `/restservices/clds/v1/openapi.json`
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 69755e4..0d97cf6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,8 @@
 				<project.scm.id>git-server</project.scm.id>
 				<java.version>1.8</java.version>
 
+				<swagger.jaxrs2.version>2.0.0-rc4</swagger.jaxrs2.version>
+				<guava.version>20.0</guava.version>
 				<eelf.core.version>1.0.0</eelf.core.version>
 				<camel.version>2.20.1</camel.version>
 				<springboot.version>1.5.10.RELEASE</springboot.version>
@@ -168,6 +170,17 @@
 		</dependencyManagement>
 
 		<dependencies>
+				<!-- Swagger requires at least v20 and policy is bringing version 14 -->
+				<dependency>
+					<groupId>com.google.guava</groupId>
+					<artifactId>guava</artifactId>
+					<version>${guava.version}</version>
+				</dependency>
+				<dependency>
+					<groupId>io.swagger.core.v3</groupId>
+					<artifactId>swagger-jaxrs2</artifactId>
+					<version>${swagger.jaxrs2.version}</version>
+				</dependency>
 				<dependency>
 						<groupId>com.att.eelf</groupId>
 						<artifactId>eelf-core</artifactId>
@@ -304,6 +317,10 @@
 						<version>1.1.0</version>
 						<exclusions>
 								<exclusion>
+										<groupId>com.google.guava</groupId>
+										<artifactId>guava</artifactId>
+								</exclusion>
+								<exclusion>
 										<artifactId>log4j</artifactId>
 										<groupId>log4j</groupId>
 								</exclusion>
diff --git a/src/main/java/org/onap/clamp/clds/service/JaxrsApplication.java b/src/main/java/org/onap/clamp/clds/service/JaxrsApplication.java
index d6e74ae..702e064 100644
--- a/src/main/java/org/onap/clamp/clds/service/JaxrsApplication.java
+++ b/src/main/java/org/onap/clamp/clds/service/JaxrsApplication.java
@@ -23,12 +23,54 @@
 
 package org.onap.clamp.clds.service;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.core.Application;
 
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
 import org.springframework.stereotype.Component;
 
 @Component
 @ApplicationPath("/restservices/clds/v1")
 public class JaxrsApplication extends Application {
+
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(JaxrsApplication.class);
+
+    private Function<BeanDefinition, Optional<Class<?>>> beanDefinitionToClass = b -> {
+        try {
+            return Optional.of(Class.forName(b.getBeanClassName()));
+        } catch (ClassNotFoundException e) {
+            logger.error("Could not get class annotated with @Path for swagger documentation generation", e);
+            return Optional.empty();
+        }
+    };
+
+    @Override
+    public Set<Class<?>> getClasses() {
+        Set<Class<?>> resources = new HashSet<>();
+        resources.add(io.swagger.v3.jaxrs2.integration.resources.OpenApiResource.class);
+        resources.addAll(scan());
+        return resources;
+    }
+
+    private List<Class<?>> scan() {
+        ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
+        scanner.addIncludeFilter(new AnnotationTypeFilter(javax.ws.rs.Path.class));
+        return scanner.findCandidateComponents("org.onap.clamp.clds").stream()
+                .map(beanDefinitionToClass)
+                .filter(Optional::isPresent)
+                .map(Optional::get)
+                .collect(Collectors.toList());
+    }
+
 }
\ No newline at end of file
