def _send(self, send_method, service_name, data=None, **kwargs):
        """Send a request to the AppNexus API (used for internal routing)

        :param send_method: The method sending the request (usualy requests.*)
        :type send_method: function
        :param service_name: The target service
        :param data: The payload of the request (optionnal)
        :type data: anything JSON-serializable
        """
        valid_response = False
        raw = kwargs.pop("raw", False)

        while not valid_response:
            headers = dict(Authorization=self.token)
            uri = self._prepare_uri(service_name, **kwargs)
            logger.debug(' '.join(map(str, (headers, uri, data))))

            response = send_method(uri, headers=headers, json=data)
            content_type = response.headers["Content-Type"].split(";")[0]

            if response.content and content_type == "application/json":
                response_data = response.json()
                if "response" in response_data:
                    response_data = response_data["response"]
            elif response.content:
                return response.content
            else:
                return None

            try:
                self.check_errors(response, response_data)
            except RateExceeded:
                self._handle_rate_exceeded(response)
            except NoAuth:
                self.update_token()
            else:
                valid_response = True
        if raw:
            return response.json()
        return response_data