docs: 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))