code: def get_content_macro_by_macro_id(self, content_id, version, macro_id, callback=None):
          
          return self._service_get_request("rest/api/content/{id}/history/{version}/macro/id/{macro_id}"
                                           "".format(id=content_id, version=int(version), macro_id=macro_id),
                                           callback=callback)
docs: Returns the body of a macro (in storage format) with the given id.
          This resource is primarily used by connect applications that require the body of macro to perform their work.
  
          When content is created, if no macroId is specified, then Confluence will generate a random id.
          The id is persisted as the content is saved and only modified by Confluence if there are conflicting IDs.
  
          To preserve backwards compatibility this resource will also match on the hash of the macro body, even if a
          macroId is found. This check will become redundant as pages get macroId's generated for them and transparently
          propagate out to all instances.
          :param content_id (string): A string containing the id of the content.
          :param version (int): The version of the content to search.
          :param macro_id (string): The macroID to find the corresponding macro.
          :param callback: OPTIONAL: The callback to execute on the resulting data, before the method returns.
                           Default: None (no callback, raw data returned).
          :return: The JSON data returned from the endpoint, or the results of the callback.
                   Will raise requests.HTTPError on bad input, potentially.