code: def _fetch_all(cls, api_key, endpoint=None, offset=0, limit=25, **kwargs):
          
          output = []
          qp = kwargs.copy()
          limit = max(1, min(100, limit))
          maximum = kwargs.get('maximum')
          qp['limit'] = min(limit, maximum) if maximum is not None else limit
          qp['offset'] = offset
          more, total = None, None
  
          while True:
              entities, options = cls._fetch_page(
                  api_key=api_key, endpoint=endpoint, **qp
              )
              output += entities
              more = options.get('more')
              limit = options.get('limit')
              offset = options.get('offset')
              total = options.get('total')
  
              if more is None:
                  if total is None or offset is None:
                      break
                  more = (limit + offset) < total
  
              if not more or (maximum is not None and len(output) >= maximum):
                  break
  
              qp['limit'] = limit
              qp['offset'] = offset + limit
  
          return output
docs: Call `self._fetch_page` for as many pages as exist.
  
          TODO: should be extended to do async page fetches if API allows it via
          exposing total value.
  
          Returns a list of `cls` instances.