def make_rest_call(self, endpoint, params=None, body=None):
        """To call Team Cymru Scout API.

        Args:
            endpoint (str): endpoint to call.
            params (json, optional): query parameters to pass in API call. Defaults to None.
            body (json, optional): Request body to pass in API call. Defaults to None.

        Returns:
            json: returns json response if API call succeed.
        """
        try:
            __method_name = inspect.currentframe().f_code.co_name
            applogger.debug(
                "{}(method={}) Calling Team Cymru Scout API for endpoint={} with params={}".format(
                    self.logs_starts_with, __method_name, endpoint, params
                )
            )
            error_messages = {
                400: "Bad Request.",
                401: "Authentication error. Please verify the provided credentials.",
                403: "Authorization error.",
                404: "Not Found.",
                429: "Team Cymru Scout API Limit Exceeded.",
                500: "Internal Server Error.",
                503: "Service Unavailable.",
            }
            request_url = "{}{}".format(self.base_url, endpoint)
            response = self.session.get(url=request_url, params=params, data=body, auth=self.auth, timeout=consts.MAX_TIMEOUT_SENTINEL)
            if response.status_code == 200:
                applogger.info("{}(method={}) API Call Successful.".format(self.logs_starts_with, __method_name))
                if response.headers.get("Content-Type") == "application/json":
                    response_json = response.json()
                    return response_json
                applogger.error(
                    "{}(method={}) Response is not in JSON format. {}".format(self.logs_starts_with, __method_name, response.text)
                )
            elif response.status_code in error_messages:
                applogger.error(
                    "{}(method={}) {} {}".format(
                        self.logs_starts_with, __method_name, error_messages.get(response.status_code), response.text
                    )
                )
                if response.status_code in consts.RETRY_STATUS_CODES:
                    return response.status_code
            else:
                applogger.error(
                    "{}(method={}) Error while fetching data from url={}. Status code: {}, Error: {}".format(
                        self.logs_starts_with,
                        __method_name,
                        request_url,
                        response.status_code,
                        response.text,
                    )
                )
            raise TeamCymruScoutException()
        except requests.exceptions.Timeout as error:
            applogger.error(
                self.error_logs.format(
                    self.logs_starts_with,
                    __method_name,
                    consts.TIME_OUT_ERROR_MSG.format(error),
                )
            )
            raise requests.exceptions.Timeout()
        except json.decoder.JSONDecodeError as error:
            applogger.error(
                self.error_logs.format(
                    self.logs_starts_with,
                    __method_name,
                    consts.JSON_DECODE_ERROR_MSG.format(error),
                )
            )
            raise TeamCymruScoutException()
        except requests.ConnectionError as error:
            applogger.error(
                self.error_logs.format(
                    self.logs_starts_with,
                    __method_name,
                    consts.CONNECTION_ERROR_MSG.format(error),
                )
            )
            raise ConnectionError()
        except requests.HTTPError as error:
            applogger.error(
                self.error_logs.format(
                    self.logs_starts_with,
                    __method_name,
                    consts.HTTP_ERROR_MSG.format(error),
                )
            )
            raise TeamCymruScoutException()
        except requests.RequestException as error:
            applogger.error(
                self.error_logs.format(
                    self.logs_starts_with,
                    __method_name,
                    consts.REQUEST_ERROR_MSG.format(error),
                )
            )
            raise TeamCymruScoutException()
        except Exception as error:
            applogger.error(
                self.error_logs.format(
                    self.logs_starts_with,
                    __method_name,
                    consts.UNEXPECTED_ERROR_MSG.format(error),
                )
            )
            raise TeamCymruScoutException()
To call Team Cymru Scout API.

        Args:
            endpoint (str): endpoint to call.
            params (json, optional): query parameters to pass in API call. Defaults to None.
            body (json, optional): Request body to pass in API call. Defaults to None.

        Returns:
            json: returns json response if API call succeed.
        
Solutions/Team Cymru Scout/Data Connectors/TeamCymruScout/SharedCode/teamcymruscout_client.py