def Call(method,url,payload,silent=False,hide_errors=[],session=None,recursion_cnt=0,debug=False):
		"""Execute v1 API call.

		:param url: URL paths associated with the API call
		:param payload: dict containing all parameters to submit with POST call
		:param hide_errors: list of API error codes to ignore.  These are not http error codes but returned from the API itself
		:param recursion_cnt: recursion counter.  This call is recursed if we experience a transient error

		:returns: decoded API json result
		"""
		if not clc._LOGIN_COOKIE_V1:  API._Login()

		if session is None:
		    session = clc._REQUESTS_SESSION

		session.headers.update({'content-type': 'application/json'})

		r = session.request(method,"%s%s/JSON" % (clc.defaults.ENDPOINT_URL_V1,url),
                             params=payload,
                             cookies=clc._LOGIN_COOKIE_V1,
                             verify=API._ResourcePath('clc/cacert.pem'))

		if debug:
			API._DebugRequest(request=requests.Request(method,"%s%s/JSON" % (clc.defaults.ENDPOINT_URL_V1,url),
                              data=payload,headers=session.headers).prepare(),response=r)

		try:
			if int(r.json()['StatusCode']) == 0:  
				if clc.args and not silent:  clc.v1.output.Status('SUCCESS',2,'%s' % (r.json()['Message']))
				return(r.json())
			elif int(r.json()['StatusCode']) in hide_errors:
				return(r.json())
			elif int(r.json()['StatusCode']) == 2:  
				# Account is deleted
				#raise clc.v1.Account.eletedException(r.json()['Message'])
				if clc.args and not silent:  clc.v1.output.Status('ERROR',3,'%s' % (r.json()['Message']))
				raise Exception(r.json()['Message'])
			elif int(r.json()['StatusCode']) == 5:  
				# Account or datacenter does not exist
				raise clc.v1.AccountDoesNotExistException(r.json()['Message'])
			elif int(r.json()['StatusCode']) == 100 and recursion_cnt<2:  
				# Not logged in - this is a transient failure
				clc._LOGIN_COOKIE_V1 = False
				return(clc.v1.API.Call(method,url,payload,silent,hide_errors,recursion_cnt+1))
			elif int(r.json()['StatusCode']) == 100:  
				# Not logged in - this keeps recurring - bail
				raise clc.v1.AccountLoginException(r.json()['Message'])
			else:
				if clc.args and (not hide_errors or not silent):  clc.v1.output.Status('ERROR',3,'Error calling %s.   Status code %s.  %s' % (url,r.json()['StatusCode'],r.json()['Message']))
				raise Exception('Error calling %s.   Status code %s.  %s' % (url,r.json()['StatusCode'],r.json()['Message']))
		#except clc.v1.Account.eletedException, clc.v1.Account.oginException:
		except clc.CLCException:
			raise
		except:
			if clc.args and (not hide_errors or not silent):  clc.v1.output.Status('ERROR',3,'Error calling %s.  Server response %s' % (url,r.status_code))
			#print "Request:  %s %s  params=%s" % (method,"%s%s/JSON" % (clc.defaults.ENDPOINT_URL_V1,url),payload)
			#print "Response: %s" % (r.text)
			#print r.url
			#print url
			#print payload
			#print r.text
			raise Exception('Error calling %s.  Server response %s' % (url,r.status_code))
Execute v1 API call.

		:param url: URL paths associated with the API call
		:param payload: dict containing all parameters to submit with POST call
		:param hide_errors: list of API error codes to ignore.  These are not http error codes but returned from the API itself
		:param recursion_cnt: recursion counter.  This call is recursed if we experience a transient error

		:returns: decoded API json result