docs: async def call_async(self, method, **parameters):
          """Makes an async call to the API.
  
          :param method: The method name.
          :param params: Additional parameters to send (for example, search=dict(id='b123') )
          :return: The JSON result (decoded into a dict) from the server.abs
          :raise MyGeotabException: Raises when an exception occurs on the MyGeotab server.
          :raise TimeoutException: Raises when the request does not respond after some time.
          """
          if method is None:
              raise Exception('A method name must be specified')
          params = api.process_parameters(parameters)
          if self.credentials and not self.credentials.session_id:
              self.authenticate()
          if 'credentials' not in params and self.credentials.session_id:
              params['credentials'] = self.credentials.get_param()
  
          try:
              result = await _query(self._server, method, params,
                                    verify_ssl=self._is_verify_ssl, loop=self.loop)
              if result is not None:
                  self.__reauthorize_count = 0
              return result
          except MyGeotabException as exception:
              if exception.name == 'InvalidUserException':
                  if self.__reauthorize_count == 0 and self.credentials.password:
                      self.__reauthorize_count += 1
                      self.authenticate()
                      return await self.call_async(method, **parameters)
                  else:
                      raise AuthenticationException(self.credentials.username,
                                                    self.credentials.database,
                                                    self.credentials.server)
              raise