docs: def request(method, path, params=None, data=None, auto_retry=True):
      """
      method - HTTP method. e.g. get, put, post, etc.
      path - Path to resource. e.g. /loss_sets/1234
      params - Parameter to pass in the query string
      data - Dictionary of parameters to pass in the request body
      """
      body = None
      if data is not None:
          body = json.dumps(data, cls=utils.DateTimeEncoder)
  
      headers = {
          'accept': 'application/json',
          'content-type': 'application/json',
          'user-agent': analyzere.user_agent,
      }
      resp = request_raw(method, path, params=params, body=body, headers=headers,
                         auto_retry=auto_retry)
      content = resp.text
      if content:
          try:
              content = json.loads(content, cls=utils.DateTimeDecoder)
          except ValueError:
              raise errors.ServerError('Unable to parse JSON response returned '
                                       'from server.', resp, resp.status_code)
      return content