Do the actual request to Fastbill's API server.

        If successful returns the RESPONSE section the of response, in
        case of an error raises a subclass of FastbillError.

def _request(self, service, **kw):
        """Do the actual request to Fastbill's API server.

        If successful returns the RESPONSE section the of response, in
        case of an error raises a subclass of FastbillError.
        """
        fb_request = {
            'service': service,
        }
        for key in ['limit', 'offset', 'filter', 'data']:
            fb_request[key] = kw.pop(key, None)

        if kw:
            raise _exc.FastbillRequestError("Unknown arguments: %s" %
                                            ", ".join(kw.keys()))

        data = _jsonencoder.dumps(fb_request)
        _logger.debug("Sending data: %r", data)

        self._pre_request_callback(service, fb_request)
        # TODO: Retry when we hit a 404 (api not found). Probably a deploy.
        http_resp = self.session.post(self.SERVICE_URL,
                                      auth=self.auth,
                                      headers=self.headers,
                                      timeout=self.timeout,
                                      data=data)
        self._post_request_callback(service, fb_request, http_resp)

        try:
            json_resp = http_resp.json()
        except ValueError:
            _logger.debug("Got data: %r", http_resp.content)
            _abort_http(service, http_resp)
            return  # to make PyCharm happy
        else:
            _logger.debug("Got data: %r", json_resp)

        errors = json_resp['RESPONSE'].get('ERRORS')
        if errors:
            _abort_api(service, json_resp, errors)

        # If Fastbill should ever remove the REQUEST or SERVICE section
        # from their responses, just remove the checks.
        if json_resp['REQUEST']['SERVICE'] != service:
            raise _exc.FastbillError(
                "API Error: Got response from wrong service.")

        return _response.FastbillResponse(json_resp['RESPONSE'], self)