code: func (c *Client) Do(req *http.Request, v interface{}) (*Response, error) {
  	resp, err := c.client.Do(req)
  	if err != nil {
  		return nil, err
  	}
  
  	// Wrap response
  	response := &Response{Response: resp}
  
  	err = CheckResponse(resp)
  	if err != nil {
  		// even though there was an error, we still return the response
  		// in case the caller wants to inspect it further
  		return response, err
  	}
  
  	if v != nil {
  		defer resp.Body.Close() // nolint: errcheck
  		if w, ok := v.(io.Writer); ok {
  			if _, err := io.Copy(w, resp.Body); err != nil { // nolint: vetshadow
  				return nil, err
  			}
  		} else {
  			var body []byte
  			body, err = ioutil.ReadAll(resp.Body)
  			if err != nil {
  				// even though there was an error, we still return the response
  				// in case the caller wants to inspect it further
  				return response, err
  			}
  
  			body = RemoveMagicPrefixLine(body)
  			err = json.Unmarshal(body, v)
  		}
  	}
  	return response, err
  }
docs: // Do sends an API request and returns the API response.
  // The API response is JSON decoded and stored in the value pointed to by v,
  // or returned as an error if an API error has occurred.
  // If v implements the io.Writer interface, the raw response body will be written to v,
  // without attempting to first decode it.