public List<TransactionRecord> query(final Date startDate, final Date endDate, final int startRow, final int endRow, Criteria[] searchCriteria) throws BeanstreamApiException
    {
        if (endDate == null || startDate == null)
            throw new IllegalArgumentException("Start Date and End Date cannot be null!");
        if (endDate.compareTo(startDate)<0)
            throw new IllegalArgumentException("End Date cannot be less than Start Date!");
        if (endRow < startRow)
            throw new IllegalArgumentException("End Row cannot be less than Start Row!");
        if (endRow - startRow > 1000)
            throw new IllegalArgumentException("You cannot query more than 1000 rows at a time!");

        if (searchCriteria == null)
            searchCriteria = new Criteria[]{};
        
        String url = BeanstreamUrls.getReportsUrl(config.getPlatform(), config.getVersion());

        final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_STRING);
        SearchQuery query = new SearchQuery(dateFormat.format(startDate), dateFormat.format(endDate), startRow, endRow, searchCriteria);
        
        connector.setGsonBuilder(getGsonBuilder());

        String response = connector.ProcessTransaction(HttpMethod.post, url, query);
        System.out.println("Response:\n"+response);
        Records records = getGson().fromJson(response, Records.class);

        return records.records;
    }