def availability(self, participants=(), required_duration=(), available_periods=(), start_interval=None, buffer=()):
        """ Performs an availability query.
        :param list participants: An Array of participant groups or a dict for a single participant group.
        :param dict or int required_duration - An Integer representing the minimum number of minutes of availability required.
        :param list available_periods - An Array of available time periods dicts, each must specify a start and end Time.
        :param dict or int start_interval - An Interger representing the start interval minutes for the event.
        :param dict buffer - An Dict representing the buffer to apply to the request.

        :rtype: ``list``
        """
        options = {}
        options['participants'] = self.map_availability_participants(
            participants)
        options['required_duration'] = self.map_availability_required_duration(
            required_duration)
        options['buffer'] = self.map_availability_buffer(buffer)

        if start_interval:
            options['start_interval'] = self.map_availability_required_duration(start_interval)

        self.translate_available_periods(available_periods)
        options['available_periods'] = available_periods

        return self.request_handler.post(endpoint='availability', data=options).json()['available_periods']