docs: 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)