code: func (r *Request) Stream() (io.ReadCloser, error) {
  	if r.err != nil {
  		return nil, r.err
  	}
  
  	r.tryThrottle()
  
  	url := r.URL().String()
  	req, err := http.NewRequest(r.verb, url, nil)
  	if err != nil {
  		return nil, err
  	}
  	if r.ctx != nil {
  		req = req.WithContext(r.ctx)
  	}
  	req.Header = r.headers
  	client := r.client
  	if client == nil {
  		client = http.DefaultClient
  	}
  	r.backoffMgr.Sleep(r.backoffMgr.CalculateBackoff(r.URL()))
  	resp, err := client.Do(req)
  	updateURLMetrics(r, resp, err)
  	if r.baseURL != nil {
  		if err != nil {
  			r.backoffMgr.UpdateBackoff(r.URL(), err, 0)
  		} else {
  			r.backoffMgr.UpdateBackoff(r.URL(), err, resp.StatusCode)
  		}
  	}
  	if err != nil {
  		return nil, err
  	}
  
  	switch {
  	case (resp.StatusCode >= 200) && (resp.StatusCode < 300):
  		return resp.Body, nil
  
  	default:
  		// ensure we close the body before returning the error
  		defer resp.Body.Close()
  
  		result := r.transformResponse(resp, req)
  		err := result.Error()
  		if err == nil {
  			err = fmt.Errorf("%d while accessing %v: %s", result.statusCode, url, string(result.body))
  		}
  		return nil, err
  	}
  }
docs: // Stream formats and executes the request, and offers streaming of the response.
  // Returns io.ReadCloser which could be used for streaming of the response, or an error
  // Any non-2xx http status code causes an error.  If we get a non-2xx code, we try to convert the body into an APIStatus object.
  // If we can, we return that as an error.  Otherwise, we create an error that lists the http status and the content of the response.