diff --git a/Jenkinsfile b/Jenkinsfile
index fbaeac0bf7e884cd110466aa1c82ccef998add27..53861d6861aef7b56661aefe6ee7a783a919fd90 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -48,7 +48,7 @@ pipeline {
                 }
 
                 configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
-                    sh 'mvn -s $MAVEN_SETTINGS clean install -Dmaven.wagon.http.retryHandler.count=3 -DelasticTests.disabled=true'
+                    sh "mvn -s $MAVEN_SETTINGS clean install -Dmaven.wagon.http.retryHandler.count=3 -DelasticTests.disabled=true -Dbuild.number=$BUILD_NUMBER"
                 }
             }
         }
diff --git a/pom.xml b/pom.xml
index ee848024a1a3d75c5c23b3c3379c8dde2ec14430..1d4c685ba2befeb87f4d6114af6dd676ccaa7bd6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,9 +14,12 @@
 	<version>1.0.0-SNAPSHOT</version>
 	<name>Administration</name>
 	<description>Administration Backend Project</description>
+
 	<properties>
 		<imageName>docker.ozg-sh.de/administration</imageName>
+		<build.number>SET_BY_JENKINS</build.number>
 	</properties>
+
 	<dependencies>
 		<!-- Spring -->
 		<dependency>
@@ -86,7 +89,7 @@
 						</configuration>
 					</plugin>
 				</plugins>
-			</build>			
+			</build>
 		</profile>
 		<profile>
 			<id>release</id>
@@ -102,11 +105,11 @@
 						</configuration>
 					</plugin>
 				</plugins>
-			</build>			
+			</build>
 		</profile>
 	</profiles>
 	<build>
-		<plugins>			
+		<plugins>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-failsafe-plugin</artifactId>
@@ -132,6 +135,19 @@
 					</exclude>
 				</excludes>
 				</configuration>
+				<executions>
+					<execution>
+						<id>build-info</id>
+						<goals>
+							<goal>build-info</goal>
+						</goals>
+						<configuration>
+							<additionalProperties>
+								<number>${build.number}</number>
+							</additionalProperties>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/src/main/java/de/ozgcloud/admin/Root.java b/src/main/java/de/ozgcloud/admin/Root.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5658c3ff6a812571e2dcb10e2ba4fcc6e524740
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/Root.java
@@ -0,0 +1,15 @@
+package de.ozgcloud.admin;
+
+import java.time.Instant;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class Root {
+	private String javaVersion;
+	private String buildVersion;
+	private Instant buildTime;
+	private String buildNumber;
+}
diff --git a/src/main/java/de/ozgcloud/admin/RootController.java b/src/main/java/de/ozgcloud/admin/RootController.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf17388b3274c557be524e5dc1d48e8dc347a7b2
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/RootController.java
@@ -0,0 +1,32 @@
+package de.ozgcloud.admin;
+
+import org.springframework.boot.info.BuildProperties;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import lombok.RequiredArgsConstructor;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(RootController.PATH)
+public class RootController {
+	static final String PATH = "/api"; // NOSONAR
+
+	private final BuildProperties buildProperties;
+
+	@GetMapping
+	public Root getRoot() {
+		return buildRoot();
+	}
+
+	private Root buildRoot() {
+		return Root.builder()
+				.javaVersion(System.getProperty("java.version"))
+				.buildTime(buildProperties.getTime())
+				.buildVersion(buildProperties.getVersion())
+				.buildNumber(buildProperties.get("number"))
+				.build();
+	}
+
+}
diff --git a/src/test/java/de/ozgcloud/admin/RootControllerTest.java b/src/test/java/de/ozgcloud/admin/RootControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2e35aae3631b6179a8c2941c3524296fcfa6b8e
--- /dev/null
+++ b/src/test/java/de/ozgcloud/admin/RootControllerTest.java
@@ -0,0 +1,91 @@
+package de.ozgcloud.admin;
+
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.info.BuildProperties;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import lombok.SneakyThrows;
+
+@ExtendWith(MockitoExtension.class)
+class RootControllerTest {
+
+	@Spy
+	@InjectMocks
+	private RootController rootController;
+
+	@Mock
+	private BuildProperties buildProperties;
+
+	private MockMvc mockMvc;
+
+	@BeforeEach
+	void mock() {
+		mockMvc = MockMvcBuilders.standaloneSetup(rootController).build();
+	}
+
+	@DisplayName("Root")
+	@Nested
+	class TestInfo {
+
+		@Test
+		@SneakyThrows
+		void shouldHaveJavaVersion() {
+			System.setProperty("java.version", RootTestFactory.JAVA_VERSION);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.javaVersion").value(RootTestFactory.JAVA_VERSION));
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldHaveVersion() {
+			when(buildProperties.getVersion()).thenReturn(RootTestFactory.BUILD_VERSION);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.buildVersion").value(RootTestFactory.BUILD_VERSION));
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldHaveBuildTime() {
+			when(buildProperties.getTime()).thenReturn(RootTestFactory.BUILD_TIME);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.buildTime").value(RootTestFactory.BUILD_TIME.getEpochSecond()));
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldHaveBuildNumber() {
+			when(buildProperties.get("number")).thenReturn(RootTestFactory.BUILD_NUMBER);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.buildNumber").value(RootTestFactory.BUILD_NUMBER));
+		}
+
+		@SneakyThrows
+		private ResultActions doRequest() {
+			return mockMvc.perform(get(RootController.PATH)).andExpect(status().isOk());
+		}
+
+	}
+
+}
diff --git a/src/test/java/de/ozgcloud/admin/RootTestFactory.java b/src/test/java/de/ozgcloud/admin/RootTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0879c7530926dbbe52514acab93f2bf3cf63820
--- /dev/null
+++ b/src/test/java/de/ozgcloud/admin/RootTestFactory.java
@@ -0,0 +1,14 @@
+package de.ozgcloud.admin;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+
+public class RootTestFactory {
+
+	public static final Instant BUILD_TIME = LocalDateTime.parse("2021-04-01T10:30").toInstant(ZoneOffset.UTC);
+	public static final String JAVA_VERSION = "1";
+	public static final String BUILD_VERSION = "2";
+	public static final String BUILD_NUMBER = "3";
+	
+}