diff --git a/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/ResponseRoleToGroupInMicroservicesDTO.java b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/ResponseRoleToGroupInMicroservicesDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f51fdb03444076cf053e168aece715a283e9154
--- /dev/null
+++ b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/ResponseRoleToGroupInMicroservicesDTO.java
@@ -0,0 +1,70 @@
+package cz.muni.ics.kypo.userandgroup.api.dto;
+
+import cz.muni.ics.kypo.userandgroup.api.dto.enums.AssignRoleToGroupStatusDTO;
+import org.springframework.http.HttpStatus;
+
+import java.util.Objects;
+
+public class ResponseRoleToGroupInMicroservicesDTO {
+    private Long roleId;
+    private Long microserviceId;
+    private AssignRoleToGroupStatusDTO status;
+    private String responseMessage;
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public Long getMicroserviceId() {
+        return microserviceId;
+    }
+
+    public void setMicroserviceId(Long microserviceId) {
+        this.microserviceId = microserviceId;
+    }
+
+    public AssignRoleToGroupStatusDTO getStatus() {
+        return status;
+    }
+
+    public void setStatus(AssignRoleToGroupStatusDTO status) {
+        this.status = status;
+    }
+
+    public String getResponseMessage() {
+        return responseMessage;
+    }
+
+    public void setResponseMessage(String responseMessage) {
+        this.responseMessage = responseMessage;
+    }
+
+    @Override
+    public String toString() {
+        return "ResponseRoleToGroupInMicroservicesDTO{" +
+                "roleId=" + roleId +
+                ", microserviceId=" + microserviceId +
+                ", status=" + status +
+                ", responseMessage='" + responseMessage + '\'' +
+                '}';
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        ResponseRoleToGroupInMicroservicesDTO that = (ResponseRoleToGroupInMicroservicesDTO) o;
+        return Objects.equals(roleId, that.roleId) &&
+                Objects.equals(microserviceId, that.microserviceId) &&
+                status == that.status;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(roleId, microserviceId, status);
+    }
+}
diff --git a/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/RoleAndMicroserviceDTO.java b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/RoleAndMicroserviceDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..412de9dadedd63bf60fdde8f71d68b8fc2e25621
--- /dev/null
+++ b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/RoleAndMicroserviceDTO.java
@@ -0,0 +1,47 @@
+package cz.muni.ics.kypo.userandgroup.api.dto;
+
+import java.util.Objects;
+
+public class RoleAndMicroserviceDTO {
+
+    private Long roleId;
+    private Long microserviceId;
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public Long getMicroserviceId() {
+        return microserviceId;
+    }
+
+    public void setMicroserviceId(Long microserviceId) {
+        this.microserviceId = microserviceId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        RoleAndMicroserviceDTO that = (RoleAndMicroserviceDTO) o;
+        return Objects.equals(roleId, that.roleId) &&
+                Objects.equals(microserviceId, that.microserviceId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(roleId, microserviceId);
+    }
+
+    @Override
+    public String toString() {
+        return "RolesAndMicroservicesDTO{" +
+                "roleId=" + roleId +
+                ", microserviceId=" + microserviceId +
+                '}';
+    }
+}
diff --git a/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/enums/AssignRoleToGroupStatusDTO.java b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/enums/AssignRoleToGroupStatusDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5bf7df9c7d93fca6c03346eb6e96e9ce269d5c0
--- /dev/null
+++ b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/dto/enums/AssignRoleToGroupStatusDTO.java
@@ -0,0 +1,5 @@
+package cz.muni.ics.kypo.userandgroup.api.dto.enums;
+
+public enum AssignRoleToGroupStatusDTO {
+    SUCCESS, NOT_FOUND, MICROSERVICE_ERROR, REST_CLIENT_ERROR,
+}
diff --git a/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/IDMGroupFacade.java b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/IDMGroupFacade.java
index 3632681a44025f07c5242bf80be2cda036805ba9..9fe77ed62f70b8ea5495056b2b5f6a6215b6ddce 100644
--- a/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/IDMGroupFacade.java
+++ b/api/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/IDMGroupFacade.java
@@ -1,6 +1,8 @@
 package cz.muni.ics.kypo.userandgroup.api.facade;
 
 import cz.muni.ics.kypo.userandgroup.api.PageResultResource;
+import cz.muni.ics.kypo.userandgroup.api.dto.ResponseRoleToGroupInMicroservicesDTO;
+import cz.muni.ics.kypo.userandgroup.api.dto.RoleAndMicroserviceDTO;
 import cz.muni.ics.kypo.userandgroup.api.dto.group.*;
 import cz.muni.ics.kypo.userandgroup.api.dto.role.RoleDTO;
 import cz.muni.ics.kypo.userandgroup.api.exceptions.ExternalSourceException;
@@ -129,4 +131,6 @@ public interface IDMGroupFacade {
      */
     void removeRoleToGroupInMicroservice(Long groupId, Long roleId, Long microserviceId) throws UserAndGroupFacadeException,
             MicroserviceException, RoleCannotBeRemovedToGroupException;
+
+    List<ResponseRoleToGroupInMicroservicesDTO> assignRolesInMicroservices(Long groupId, List<RoleAndMicroserviceDTO> rolesAndMicroservices);
 }
diff --git a/rest/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/GroupsRestController.java b/rest/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/GroupsRestController.java
index ba0379ba93abe489c61740330eddf0b0c1e43b50..1da8f3391486c1b655b0fd0919404722526aa80f 100644
--- a/rest/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/GroupsRestController.java
+++ b/rest/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/GroupsRestController.java
@@ -6,6 +6,8 @@ import com.github.bohnman.squiggly.util.SquigglyUtils;
 import com.google.common.base.Preconditions;
 import com.querydsl.core.types.Predicate;
 import cz.muni.ics.kypo.userandgroup.api.PageResultResource;
+import cz.muni.ics.kypo.userandgroup.api.dto.ResponseRoleToGroupInMicroservicesDTO;
+import cz.muni.ics.kypo.userandgroup.api.dto.RoleAndMicroserviceDTO;
 import cz.muni.ics.kypo.userandgroup.api.exceptions.ExternalSourceException;
 import cz.muni.ics.kypo.userandgroup.api.exceptions.MicroserviceException;
 import cz.muni.ics.kypo.userandgroup.api.exceptions.RoleCannotBeRemovedToGroupException;
@@ -19,6 +21,7 @@ import cz.muni.ics.kypo.userandgroup.rest.utils.ApiPageableSwagger;
 
 import io.swagger.annotations.*;
 
+import io.swagger.models.Response;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -242,6 +245,22 @@ public class GroupsRestController {
         }
     }
 
+    @ApiOperation(httpMethod = "POST",
+            value = "Assign roles with given roles IDs to group with given ID in chosen microservices"
+    )
+    @PostMapping("/{groupId}/roles-collection")
+    public ResponseEntity<List<ResponseRoleToGroupInMicroservicesDTO>> assignRolesInMicroservices(
+            @ApiParam(value = "groupId", required = true) @PathVariable("groupId") Long groupId,
+            @ApiParam(value = "rolesAndMicroservices", required = true) @RequestBody List<RoleAndMicroserviceDTO> rolesAndMicroservices) {
+//        try {
+        return new ResponseEntity<>(groupFacade.assignRolesInMicroservices(groupId, rolesAndMicroservices), HttpStatus.OK);
+//        } catch (UserAndGroupFacadeException e) {
+//            throw new ResourceNotFoundException("Group with id: " + groupId + " or microserviceservice with id " + ram.getMicroserviceId() + " could not be found.");
+//        } catch (MicroserviceException e) {
+//            throw new ServiceUnavailableException(e.getLocalizedMessage());
+//        }
+    }
+
     @ApiOperation(httpMethod = "DELETE",
             value = "Cancel role with given role ID to group with given ID in chosen microservice"
     )
diff --git a/service/src/main/java/cz/muni/ics/kypo/userandgroup/facade/IDMGroupFacadeImpl.java b/service/src/main/java/cz/muni/ics/kypo/userandgroup/facade/IDMGroupFacadeImpl.java
index 911bc0e834d31fa311749ca2cfa55cd36710e11b..c35ff2050b4428603ebf9aad7f46895dc8febdc1 100644
--- a/service/src/main/java/cz/muni/ics/kypo/userandgroup/facade/IDMGroupFacadeImpl.java
+++ b/service/src/main/java/cz/muni/ics/kypo/userandgroup/facade/IDMGroupFacadeImpl.java
@@ -5,6 +5,9 @@ import com.google.gson.JsonParser;
 import com.querydsl.core.types.Predicate;
 import cz.muni.ics.kypo.userandgroup.api.PageResultResource;
 import cz.muni.ics.kypo.userandgroup.api.dto.MicroserviceForGroupDeletionDTO;
+import cz.muni.ics.kypo.userandgroup.api.dto.ResponseRoleToGroupInMicroservicesDTO;
+import cz.muni.ics.kypo.userandgroup.api.dto.RoleAndMicroserviceDTO;
+import cz.muni.ics.kypo.userandgroup.api.dto.enums.AssignRoleToGroupStatusDTO;
 import cz.muni.ics.kypo.userandgroup.api.dto.enums.GroupDeletionStatusDTO;
 import cz.muni.ics.kypo.userandgroup.api.dto.group.*;
 import cz.muni.ics.kypo.userandgroup.api.dto.role.RoleDTO;
@@ -301,6 +304,52 @@ public class IDMGroupFacadeImpl implements IDMGroupFacade {
             throw new UserAndGroupFacadeException(e);
         }
     }
+    @Override
+    public List<ResponseRoleToGroupInMicroservicesDTO> assignRolesInMicroservices(Long groupId, List<RoleAndMicroserviceDTO> rolesAndMicroservices) {
+        Assert.notNull(groupId, "Input groupId must not be null");
+        Assert.notNull(rolesAndMicroservices, "Input roles and microservices must not be null");
+        List<ResponseRoleToGroupInMicroservicesDTO> responses = new ArrayList<>();
+        for (RoleAndMicroserviceDTO ram : rolesAndMicroservices) {
+            ResponseRoleToGroupInMicroservicesDTO resp = new ResponseRoleToGroupInMicroservicesDTO();
+            resp.setRoleId(ram.getRoleId());
+            resp.setMicroserviceId(ram.getMicroserviceId());
+            try {
+                Microservice microservice = microserviceService.get(ram.getMicroserviceId());
+                groupService.get(groupId);
+                if (microservice.getName().equals(NAME_OF_USER_AND_GROUP_SERVICE)) {
+                    groupService.assignRole(groupId, roleService.getById(ram.getRoleId()).getRoleType());
+                    resp.setStatus(AssignRoleToGroupStatusDTO.SUCCESS);
+                } else {
+                    final String url = microservice.getEndpoint() + "/groups/{groupId}/roles/{roleId}";
+                    OAuth2AuthenticationDetails auth = (OAuth2AuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails();
+                    HttpHeaders headers = new HttpHeaders();
+                    headers.add("Authorization", auth.getTokenType() + " " + auth.getTokenValue());
+                    HttpEntity<String> entity = new HttpEntity<>(null, headers);
+                    try {
+                        ResponseEntity<Void> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, Void.class, groupId, ram.getRoleId());
+                        if (!responseEntity.getStatusCode().is2xxSuccessful()) {
+                            resp.setStatus(AssignRoleToGroupStatusDTO.MICROSERVICE_ERROR);
+                            resp.setResponseMessage("Status code: " + responseEntity.getStatusCode().toString() + " Body: " + responseEntity.getBody());
+                        }
+                        resp.setStatus(AssignRoleToGroupStatusDTO.SUCCESS);
+                    } catch (HttpClientErrorException e) {
+                        resp.setStatus(AssignRoleToGroupStatusDTO.MICROSERVICE_ERROR);
+                        resp.setResponseMessage("Cannot assign role to group in given microservice. It is return status code: " + e.getStatusCode() + ".");
+                    } catch (RestClientException e) {
+                        resp.setStatus(AssignRoleToGroupStatusDTO.REST_CLIENT_ERROR);
+                        resp.setResponseMessage(e.getCause().getMessage());
+                    }
+                }
+            } catch (UserAndGroupServiceException e) {
+                resp.setStatus(AssignRoleToGroupStatusDTO.NOT_FOUND);
+                resp.setResponseMessage(e.getMessage());
+            }
+            responses.add(resp);
+
+        }
+        return responses;
+    }
+
 
     @Override
     public boolean isGroupInternal(Long id) throws UserAndGroupFacadeException {