diff --git a/src/main/java/com/example/demo/controller/InfoLevelController.java b/src/main/java/com/example/demo/controller/InfoLevelController.java
new file mode 100644
index 0000000000000000000000000000000000000000..00a87d03b101c73d8b3303a803ac2c6826e594c5
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/InfoLevelController.java
@@ -0,0 +1,85 @@
+package com.example.demo.controller;
+
+import com.example.demo.dto.InfoLevelCreateDto;
+import com.example.demo.dto.InfoLevelDto;
+import com.example.demo.dto.InfoLevelUpdateDto;
+import com.example.demo.service.InfoLevelService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/info-level")
+@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*",
+             methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PUT})
+@Api(value = "/info-level", tags = {"Info Level"})
+public class InfoLevelController {
+
+    private final InfoLevelService infoLevelService;
+
+    @Autowired
+    public InfoLevelController(InfoLevelService infoLevelService) {
+        this.infoLevelService = infoLevelService;
+    }
+
+    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "Create a new info level")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "New info level created"),
+                           @ApiResponse(code = 500, message = "Unexpected application error")})
+    public InfoLevelDto createInfoLevel(@ApiParam(value = "Game level", required = true) @RequestBody(required = true)
+                                            InfoLevelCreateDto infoLevelCreateDto) {
+        return infoLevelService.createInfoLevel(infoLevelCreateDto);
+    }
+
+    @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "Return info levels")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Return info levels"),
+                           @ApiResponse(code = 500, message = "Unexpected application error")})
+    public List<InfoLevelDto> findInfoLevels() {
+        return infoLevelService.findAllInfoLevels();
+    }
+
+    @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "Get info level detail")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Game level detail"),
+                           @ApiResponse(code = 500, message = "Unexpected application error")})
+    public InfoLevelDto getInfoLevel(
+        @ApiParam(value = "Game Level ID", required = true) @PathVariable("id") final Long id) {
+        return infoLevelService.getInfoLevel(id);
+    }
+
+    @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "Update info level")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Updated info level"),
+                           @ApiResponse(code = 500, message = "Unexpected application error")})
+    public InfoLevelDto updateInfoLevel(
+        @ApiParam(value = "Game Level ID", required = true) @PathVariable("id") final Long id,
+        @ApiParam(value = "Update data", required = true) @RequestBody(required = true)
+            InfoLevelUpdateDto infoLevelUpdateDto) {
+        return infoLevelService.updateInfoLevel(id, infoLevelUpdateDto);
+    }
+
+    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
+    @ApiOperation(value = "Remove info level")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Game level removed"),
+                           @ApiResponse(code = 500, message = "Unexpected application error")})
+    public void removeInfoLevel(@ApiParam(value = "Game Level ID", required = true) @PathVariable("id") final Long id) {
+        infoLevelService.removeInfoLevel(id);
+    }
+}
diff --git a/src/main/java/com/example/demo/dto/InfoLevelCreateDto.java b/src/main/java/com/example/demo/dto/InfoLevelCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..4899d35389c44fe31dc856085bdbcf9888790928
--- /dev/null
+++ b/src/main/java/com/example/demo/dto/InfoLevelCreateDto.java
@@ -0,0 +1,9 @@
+package com.example.demo.dto;
+
+public class InfoLevelCreateDto extends InfoLevelUpdateDto {
+
+    @Override
+    public String toString() {
+        return "InfoLevelCreateDto{} " + super.toString();
+    }
+}
diff --git a/src/main/java/com/example/demo/dto/InfoLevelDto.java b/src/main/java/com/example/demo/dto/InfoLevelDto.java
index c6b259e8021acfadb2a2ace4c1a29e187f31b7c8..a09fba3d4d99aa61f9e0bcd98ff1a1a54afd59b5 100644
--- a/src/main/java/com/example/demo/dto/InfoLevelDto.java
+++ b/src/main/java/com/example/demo/dto/InfoLevelDto.java
@@ -2,11 +2,10 @@ package com.example.demo.dto;
 
 import java.io.Serializable;
 
-public class InfoLevelDto extends BaseLevelDto implements Serializable {
+public class InfoLevelDto extends InfoLevelUpdateDto implements Serializable {
 
     private Long id;
 
-    private String content;
 
     public Long getId() {
         return id;
@@ -16,19 +15,10 @@ public class InfoLevelDto extends BaseLevelDto implements Serializable {
         this.id = id;
     }
 
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
     @Override
     public String toString() {
         return "InfoLevelDto{" +
             "id=" + id +
-            ", content='" + content + '\'' +
             "} " + super.toString();
     }
 }
diff --git a/src/main/java/com/example/demo/dto/InfoLevelUpdateDto.java b/src/main/java/com/example/demo/dto/InfoLevelUpdateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..f61903bcca0061ad10d3c089184fb408fb1062ad
--- /dev/null
+++ b/src/main/java/com/example/demo/dto/InfoLevelUpdateDto.java
@@ -0,0 +1,19 @@
+package com.example.demo.dto;
+
+public class InfoLevelUpdateDto extends BaseLevelDto {
+
+    private String content;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "InfoLevelUpdateDto{" + "content='" + content + '\'' + '}';
+    }
+}
diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java
index 293da7e18f2a44288d9611676758142d1f0e6196..522a136d8ce8b4e868b71a6f5b95f0ac27f54730 100644
--- a/src/main/java/com/example/demo/mapper/BeanMapper.java
+++ b/src/main/java/com/example/demo/mapper/BeanMapper.java
@@ -11,7 +11,9 @@ import com.example.demo.dto.GameLevelCreateDto;
 import com.example.demo.dto.GameLevelDto;
 import com.example.demo.dto.GameLevelUpdateDto;
 import com.example.demo.dto.HintDto;
+import com.example.demo.dto.InfoLevelCreateDto;
 import com.example.demo.dto.InfoLevelDto;
+import com.example.demo.dto.InfoLevelUpdateDto;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
@@ -37,6 +39,10 @@ public interface BeanMapper {
 
     InfoLevel toEntity(InfoLevelDto infoLevel);
 
+    InfoLevel toEntity(InfoLevelCreateDto gameLevel);
+
+    InfoLevel toEntity(InfoLevelUpdateDto gameLevel);
+
     HintDto toDto(Hint hint);
 
     Hint toEntity(HintDto hint);
diff --git a/src/main/java/com/example/demo/repository/InfoLevelRepository.java b/src/main/java/com/example/demo/repository/InfoLevelRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..e925a2b3cfe1c7f4be0ce8fa621d58600e3afcf6
--- /dev/null
+++ b/src/main/java/com/example/demo/repository/InfoLevelRepository.java
@@ -0,0 +1,7 @@
+package com.example.demo.repository;
+
+import com.example.demo.domain.InfoLevel;
+import org.springframework.data.neo4j.repository.Neo4jRepository;
+
+public interface InfoLevelRepository extends Neo4jRepository<InfoLevel, Long> {
+}
diff --git a/src/main/java/com/example/demo/service/InfoLevelService.java b/src/main/java/com/example/demo/service/InfoLevelService.java
new file mode 100644
index 0000000000000000000000000000000000000000..089dc4492b465104bf9db4020834c54ad58fb14e
--- /dev/null
+++ b/src/main/java/com/example/demo/service/InfoLevelService.java
@@ -0,0 +1,84 @@
+package com.example.demo.service;
+
+import com.example.demo.domain.InfoLevel;
+import com.example.demo.dto.InfoLevelCreateDto;
+import com.example.demo.dto.InfoLevelDto;
+import com.example.demo.dto.InfoLevelUpdateDto;
+import com.example.demo.mapper.BeanMapper;
+import com.example.demo.repository.InfoLevelRepository;
+import org.apache.commons.collections4.IterableUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class InfoLevelService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(InfoLevelService.class);
+
+    private final InfoLevelRepository infoLevelRepository;
+
+    @Autowired
+    public InfoLevelService(InfoLevelRepository infoLevelRepository) {
+        this.infoLevelRepository = infoLevelRepository;
+    }
+
+    public InfoLevelDto createInfoLevel(InfoLevelCreateDto infoLevelCreateDto) {
+        InfoLevel infoLevel = BeanMapper.INSTANCE.toEntity(infoLevelCreateDto);
+
+        InfoLevel persistedEntity = infoLevelRepository.save(infoLevel);
+
+        return BeanMapper.INSTANCE.toDto(persistedEntity);
+    }
+
+    public List<InfoLevelDto> findAllInfoLevels() {
+
+        Iterable<InfoLevel> allInfoLevels = infoLevelRepository.findAll();
+
+        List<InfoLevelDto> result = new ArrayList<>();
+
+        if (!IterableUtils.isEmpty(allInfoLevels)) {
+            for (InfoLevel infoLevel : allInfoLevels) {
+                result.add(BeanMapper.INSTANCE.toDto(infoLevel));
+            }
+        }
+
+        return result;
+    }
+
+    public InfoLevelDto getInfoLevel(Long id) {
+        Optional<InfoLevel> infoLevel = infoLevelRepository.findById(id);
+
+        if (infoLevel.isEmpty()) {
+            LOG.error("No info level found with ID {}.", id);
+            return new InfoLevelDto();
+        }
+
+        return BeanMapper.INSTANCE.toDto(infoLevel.get());
+    }
+
+    public InfoLevelDto updateInfoLevel(Long id, InfoLevelUpdateDto infoLevelUpdateDto) {
+        Optional<InfoLevel> persistedInfoLevel = infoLevelRepository.findById(id);
+
+        if (persistedInfoLevel.isEmpty()) {
+            LOG.error("No info level found with ID {}.", id);
+            return new InfoLevelDto();
+        }
+
+        InfoLevel infoLevel = BeanMapper.INSTANCE.toEntity(infoLevelUpdateDto);
+        infoLevel.setId(persistedInfoLevel.get().getId());
+
+        InfoLevel savedEntity = infoLevelRepository.save(infoLevel);
+
+        return BeanMapper.INSTANCE.toDto(savedEntity);
+    }
+
+    public void removeInfoLevel(Long id) {
+        infoLevelRepository.deleteById(id);
+    }
+}