def METHOD_NAME(self, action="GET", url="/", data=None, query_params=None):
    if data is None:
        data = {}
    if query_params is None:
        query_params = {}
    default_headers = {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": f"Bearer {self._get_provider_option('auth_token')}",
    }
    if not url.startswith(self.api_endpoint):
        url = self.api_endpoint + url
    response = requests.request(
        action,
        url,
        params=query_params,
        data=json.dumps(data),
        headers=default_headers,
    )
    # if the request fails for any reason, throw an error.
    response.raise_for_status()
    if action == "DELETE":
        return ""
    return response.json()