def list_appointment_groups(self, context_codes=None, include=None, include_past_appointments=None, scope=None):
        """
        List appointment groups.

        Retrieve the list of appointment groups that can be reserved or managed by
        the current user.
        """
        path = {}
        data = {}
        params = {}

        # OPTIONAL - scope
        """Defaults to "reservable""""
        if scope is not None:
            self._validate_enum(scope, ["reservable", "manageable"])
            params["scope"] = scope

        # OPTIONAL - context_codes
        """Array of context codes used to limit returned results."""
        if context_codes is not None:
            params["context_codes"] = context_codes

        # OPTIONAL - include_past_appointments
        """Defaults to false. If true, includes past appointment groups"""
        if include_past_appointments is not None:
            params["include_past_appointments"] = include_past_appointments

        # OPTIONAL - include
        """Array of additional information to include.
        
        "appointments":: calendar event time slots for this appointment group
        "child_events":: reservations of those time slots
        "participant_count":: number of reservations
        "reserved_times":: the event id, start time and end time of reservations
                           the current user has made)
        "all_context_codes":: all context codes associated with this appointment group"""
        if include is not None:
            self._validate_enum(include, ["appointments", "child_events", "participant_count", "reserved_times", "all_context_codes"])
            params["include"] = include

        self.logger.debug("GET /api/v1/appointment_groups with query params: {params} and form data: {data}".format(params=params, data=data, **path))
        return self.generic_request("GET", "/api/v1/appointment_groups".format(**path), data=data, params=params, no_data=True)