@PUT
  @Path("/request/{requestId}/instances")
  @ApiOperation(
      value = "Scale the number of instances up or down for a specific Request",
      response = SingularityRequest.class)
  @ApiResponses({
    @ApiResponse(code = 400, message = "Posted object did not match Request ID"),
    @ApiResponse(code = 404, message = "No Request with that ID"),
  })
  public SingularityRequest updateInstances(
      @ApiParam("The Request ID to scale") @PathParam("requestId") String requestId,
      @ApiParam("Username of the person requesting the scale") @QueryParam("user")
          Optional<String> user,
      @ApiParam("Object to hold number of instances to request")
          SingularityRequestInstances newInstances) {

    checkBadRequest(
        requestId != null && newInstances.getId() != null && requestId.equals(newInstances.getId()),
        "Update for request instance must pass a matching non-null requestId in path (%s) and object (%s)",
        requestId,
        newInstances.getId());
    checkConflict(
        !requestManager.cleanupRequestExists(requestId),
        "Request %s is currently cleaning. Try again after a few moments",
        requestId);

    SingularityRequest oldRequest = fetchRequest(requestId);
    Optional<SingularityRequest> maybeOldRequest = Optional.of(oldRequest);

    SingularityRequestDeployHolder deployHolder = getDeployHolder(newInstances.getId());
    SingularityRequest newRequest =
        oldRequest.toBuilder().setInstances(newInstances.getInstances()).build();

    validator.checkSingularityRequest(
        newRequest,
        maybeOldRequest,
        deployHolder.getActiveDeploy(),
        deployHolder.getPendingDeploy());

    final long now = System.currentTimeMillis();

    requestManager.update(newRequest, now, user);

    checkReschedule(newRequest, maybeOldRequest, now);

    return newRequest;
  }