docs: def _get_json(self, model, space=None, rel_path=None, extra_params=None, get_all=None):
          """
          Base level method for fetching data from the API
          """
          # Only API.spaces and API.event should not provide
          # the `space argument
          if space is None and model not in (Space, Event):
              raise Exception(
                  'In general, `API._get_json` should always '
                  'be called with a `space` argument.'
              )
  
          if not extra_params:
              extra_params = {}
  
          # Handle pagination for requests carrying large amounts of data
          extra_params['page'] = extra_params.get('page', 1)
  
          # Generate the url to hit
          url = '{0}/{1}/{2}.json?{3}'.format(
              settings.API_ROOT_PATH,
              settings.API_VERSION,
              rel_path or model.rel_path,
              urllib.urlencode(extra_params),
          )
  
          # If the cache is being used and the url has been hit already
          if self.cache_responses and url in self.cache:
              response = self.cache[url]
          else:
              # Fetch the data
              headers = {
                  'X-Api-Key': self.key,
                  'X-Api-Secret': self.secret,
              }
              response = self.session.get(url=url, headers=headers)
              # If the cache is being used, update it
              if self.cache_responses:
                  self.cache[url] = response
  
          if response.status_code == 200:  # OK
              results = []
              json_response = response.json()
              for obj in json_response:
                  instance = model(data=obj)
                  instance.api = self
                  if space:
                      instance.space = space
                  results.append(instance)
              # If it looks like there are more pages to fetch,
              # try and fetch the next one
              per_page = extra_params.get('per_page', None)
              if (
                  get_all
                  and per_page
                  and len(json_response)
                  and per_page == len(json_response)
              ):
                  extra_params['page'] += 1
                  results = results + self._get_json(model, space, rel_path, extra_params, get_all=get_all)
              return results
          elif response.status_code == 204:  # No Content
              return []
          else:  # Most likely a 404 Not Found
              raise Exception(
                  'Code {0} returned from `{1}`. Response text: "{2}".'.format(
                      response.status_code,
                      url,
                      response.text
                  )
              )