code: func (c *Client) Do(req *http.Request, v interface{}) (*Response, error) {
  	httpResp, err := c.client.Do(req)
  	if err != nil {
  		return nil, err
  	}
  
  	err = CheckResponse(httpResp)
  	if err != nil {
  		// Even though there was an error, we still return the response
  		// in case the caller wants to inspect it further
  		return newResponse(httpResp, nil), err
  	}
  
  	if v != nil {
  		// Open a NewDecoder and defer closing the reader only if there is a provided interface to decode to
  		defer httpResp.Body.Close()
  		err = json.NewDecoder(httpResp.Body).Decode(v)
  	}
  
  	resp := newResponse(httpResp, v)
  	return resp, 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.