def remote_update(
    self,
    batch=None,
    failure=None,
    files=None,
    params=None,
    success=None,
    api_version=None,
  ):
    """Updates the object by calling the API with only the changes recorded.
    Args:
      batch (optional): A FacebookAdsApiBatch object. If specified,
        the call will be added to the batch.
      params (optional): A mapping of request parameters where a key
        is the parameter name and its value is a string or an object
        which can be JSON-encoded.
      files (optional): An optional mapping of file names to binary open
        file objects. These files will be attached to the request.
      success (optional): A callback function which will be called with
        the FacebookResponse of this call if the call succeeded.
      failure (optional): A callback function which will be called with
        the FacebookResponse of this call if the call failed.
    Returns:
      self if not a batch call.
      the return value of batch.add if a batch call.
    """
    params = {} if not params else params.copy()
    params.update(self.export_changed_data())
    self._set_data(params)
    if hasattr(self, 'api_update'):
      request = self.api_update(pending=True)
    else:
      request = FacebookRequest(
        node_id=self.get_id_assured(),
        method='POST',
        endpoint='/',
        api=self._api,
        target_class=self.__class__,
        response_parser=ObjectParser(
          reuse_object=self
        ),
      )
    request.add_params(params)
    request.add_files(files)

    if batch is not None:
      def callback_success(response):
        self._clear_history()

        if success:
          success(response)

      def callback_failure(response):
        if failure:
          failure(response)

      batch_call = batch.add_request(
        request=request,
        success=callback_success,
        failure=callback_failure,
      )
      return batch_call
    else:
      request.execute()
      self._clear_history()

      return self
  def remote_create(
    self,
    batch=None,
    failure=None,
    files=None,
    params=None,
    success=None,
    api_version=None,
  ):
    """Creates the object by calling the API.
    Args:
      batch (optional): A FacebookAdsApiBatch object. If specified,
        the call will be added to the batch.
      params (optional): A mapping of request parameters where a key
        is the parameter name and its value is a string or an object
        which can be JSON-encoded.
      files (optional): An optional mapping of file names to binary open
        file objects. These files will be attached to the request.
      success (optional): A callback function which will be called with
        the FacebookResponse of this call if the call succeeded.
      failure (optional): A callback function which will be called with
        the FacebookResponse of this call if the call failed.
    Returns:
      self if not a batch call.
      the return value of batch.add if a batch call.
    """
    if self.get_id():
      raise FacebookBadObjectError(
        "This %s object was already created."
        % self.__class__.__name__,
      )
    if not 'get_endpoint' in dir(self):
      raise TypeError('Cannot create object of type %s.'
              % self.__class__.__name__)

    params = {} if not params else params.copy()
    params.update(self.export_all_data())
    request = None
    if hasattr(self, 'api_create'):
      request = self.api_create(self.get_parent_id_assured(), pending=True)
    else:
      request = FacebookRequest(
        node_id=self.get_parent_id_assured(),
        method='POST',
        endpoint=self.get_endpoint(),
        api=self._api,
        target_class=self.__class__,
        response_parser=ObjectParser(
          reuse_object=self
        ),
      )
    request.add_params(params)
    request.add_files(files)

    if batch is not None:

      def callback_success(response):
        self._set_data(response.json())
        self._clear_history()

        if success:
          success(response)

      def callback_failure(response):
        if failure:
          failure(response)

      return batch.add_request(
        request=request,
        success=callback_success,
        failure=callback_failure,
      )
    else:
      response = request.execute()
      self._set_data(response._json)
      self._clear_history()

      return self