def METHOD_NAME(self, api_endpoint, data=None, method="GET", headers={}):
    url = "{}{}".format(self.api_root, api_endpoint)
    headers = headers.copy()
    if method.upper() not in ("GET", "HEAD"):
        headers.update(self._get_taskcluster_headers(url, method, data, self.taskcluster_client_id, self.taskcluster_access_token))
    try:
        def _req():
            req = self.session.request(method=method, url=url, data=data, timeout=self.timeout, verify=self.verify, headers=headers)
            req.raise_for_status()
            return req
        return retry(_req, sleeptime=5, max_sleeptime=15, retry_exceptions=(requests.HTTPError, requests.ConnectionError), attempts=self.retries)
    except requests.HTTPError as err:
        log.error("Caught HTTPError: %d %s", err.response.status_code, err.response.content, exc_info=True)
        raise