def Call(method,url,payload=None,session=None,debug=False):
		if session is not None:
			token = session['token']
			http_session = session['http_session']
		else:
			if not clc._LOGIN_TOKEN_V2:
				API._Login()
			token = clc._LOGIN_TOKEN_V2
			http_session = clc._REQUESTS_SESSION
		if payload is None:
		    payload = {}
		if url[0]=='/':  fq_url = "%s%s" % (clc.defaults.ENDPOINT_URL_V2,url)
		else:  fq_url = "%s/v2/%s" % (clc.defaults.ENDPOINT_URL_V2,url)
		http_session.headers.update({'Authorization': "Bearer %s" % token})
		if isinstance(payload, basestring):  http_session.headers['content-type'] = "Application/json"
		else:  http_session.headers['content-type'] = "application/x-www-form-urlencoded"
		if method=="GET":
			r = http_session.request(method,fq_url,
			                     params=payload,
								 verify=API._ResourcePath('clc/cacert.pem'))
		else:
			r = http_session.request(method,fq_url,
			                     data=payload,
								 verify=API._ResourcePath('clc/cacert.pem'))
		if debug:
			API._DebugRequest(request=requests.Request(method,fq_url,data=payload,headers=http_session.headers).prepare(),
			                  response=r)
		if r.status_code>=200 and r.status_code<300:
			try:
				return(r.json())
			except:
				return({})
		else:
			try:
				e = clc.APIFailedResponse("Response code %s.  %s %s %s" %
				                          (r.status_code,r.json()['message'],method,fq_url))
				e.response_status_code = r.status_code
				e.response_json = r.json()
				e.response_text = r.text
				raise(e)
			except clc.APIFailedResponse:
				raise
			except:
				e = clc.APIFailedResponse("Response code %s. %s. %s %s" %
				                         (r.status_code,r.text,method,fq_url))
				e.response_status_code = r.status_code
				e.response_json = {}
				e.response_text = r.text
				raise(e)