<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find(cls, api_key=None, fetch_all=True, endpoint=None, maximum=None, **kwargs):
 """ Find some entities from the API endpoint. If no api_key is provided, the global api key will be used. If fetch_all is True, page through all the data and find every record that exists. If add_headers is provided (as a dict) use it to add headers to the HTTP request, eg. {'host': 'some.hidden.host'} Capitalizing header keys does not matter. Remaining keyword arguments will be passed as `query_params` to the instant method `request` (ClientMixin). """

        exclude = kwargs.pop('exclude', None)

        # if exclude param was passed a a string, list-ify it
        if isinstance(exclude, six.string_types):
            exclude = [exclude, ]

        query_params = cls.translate_query_params(**kwargs)

        # unless otherwise specified use the class variable for the endpoint
        if endpoint is None:
            endpoint = cls.get_endpoint()

        if fetch_all:
            result = cls._fetch_all(api_key=api_key, endpoint=endpoint,
                                    maximum=maximum,
                                    **query_params)
        else:
            result = cls._fetch_page(api_key=api_key, endpoint=endpoint,
                                     maximum=maximum,
                                     **query_params)

        # for each result run it through an exlcusion filter
        collection = [r for r in result
                      if not cls._find_exclude_filter(exclude, r)]
        return collection