docs: def add_data(self, data, cloud=None, batch=False, api_key=None, version=None, **kwargs):
          """
          This is the basic training endpoint. Given a piece of text and a score, either categorical
          or numeric, this endpoint will train a new model given the additional piece of information.
  
          Inputs
          data - List: The text and collection/score associated with it. The length of the text (string) should ideally
            be longer than 100 characters and contain at least 10 words. While the API will support
            shorter text, you will find that the accuracy of results improves significantly with longer
            examples. For an additional fee, this end point will support image input as well. The collection/score
            can be a string or float. This is the variable associated with the text. This can either be categorical
            (the tag associated with the post) or numeric (the number of Facebook shares the post
            received). However it can only be one or another within a given label.
          domain (optional) - String: This is an identifier that helps determine the appropriate techniques for indico
            to use behind the scenes to train your model.  One of {"standard", "topics"}.
          api_key (optional) - String: Your API key, required only if the key has not been declared
            elsewhere. This allows the API to recognize a request as yours and automatically route it
            to the appropriate destination.
          cloud (optional) - String: Your private cloud domain, required only if the key has not been declared
            elsewhere. This allows the API to recognize a request as yours and automatically route it
            to the appropriate destination.
          """
          if not len(data):
            raise IndicoError("No input data provided.")
          batch = isinstance(data[0], (list, tuple, dict))
  
          # standarize format for preprocessing batch of examples
          if not batch:
            data = [data]
  
          X, Y, metadata = _unpack_data(data)
          X = data_preprocess(X, batch=True)
          data = _pack_data(X, Y, metadata)
  
          # if a single example was passed in, unpack
          if not batch:
            data = data[0]
  
          url_params = {"batch": batch, "api_key": api_key, "version": version, 'method': "add_data"}
          return self._api_handler(data, cloud=cloud, api="custom", url_params=url_params, **kwargs)