<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fetch(self, path, parse=lambda r: r['results'][0]):
 """ Make an API request, with authentication. This method can be used directly to fetch new endpoints or customize parsing. :: 101 """

        url = self.BASE_URI + path
        headers = {'X-API-Key': self.apikey}

        log.debug(url)

        resp, content = self.http.request(url, headers=headers)
        content = u(content)
        content = json.loads(content)

        # handle errors
        if not content.get('status') == 'OK':

            if "errors" in content and content['errors'][0]['error'] == "Record not found":
                raise NotFound(path)

            if content.get('status') == '404':
                raise NotFound(path)

            raise CongressError(content, resp, url)

        if callable(parse):
            content = parse(content)

        return content