docs: def send_request(input_data, api, url, headers, kwargs):
      """
      Use the requests library to send of an HTTP call to the indico servers
      """
      data = {}
      if input_data != None:
          data['data'] = input_data
  
      # request that the API respond with a msgpack encoded result
      serializer = kwargs.pop("serializer", config.serializer)
      data['serializer'] = serializer
  
      data.update(**kwargs)
  
      json_data = json.dumps(data)
  
      response = requests.post(url, data=json_data, headers=headers)
  
      warning = response.headers.get('x-warning')
      if warning:
          warnings.warn(warning)
  
      cloud = urlparse(url).hostname
      if response.status_code == 503 and not cloud.endswith('.indico.io'):
          raise APIDoesNotExist("Private cloud '%s' does not include api '%s'" % (cloud, api))
  
      try:
          if serializer == 'msgpack':
              json_results = msgpack.unpackb(response.content)
          else:
              json_results = response.json()
      except (msgpack.exceptions.UnpackException, msgpack.exceptions.ExtraData):
          try:
              json_results = response.json()
          except:
              json_results = {"error": response.text}
  
  
      if config.PY3:
          json_results = convert(json_results)
  
      results = json_results.get('results', False)
      if results is False:
          error = json_results.get('error')
          raise convert_to_py_error(error)
      return results