code: func (c *Client) Do(req *http.Request, v interface{}) (*http.Response, error) {
  	var resp *http.Response
  	var err error
  
  	if c.Debug {
  		fmt.Println(req.URL.String())
  	}
  
  	err = backoff.Retry(func() error {
  		resp, err = c.client.Do(req)
  		if err != nil {
  			return err
  		}
  		if c := resp.StatusCode; c == 500 || c >= 502 && c <= 599 {
  			// Avoid retry on 501: Not Implemented
  			err = &status5xx{}
  		}
  		return err
  	}, c.b)
  	c.b.Reset()
  
  	if err != nil {
  		if _, ok := err.(*status5xx); !ok {
  			return nil, err
  		}
  	}
  
  	if c.Debug {
  		dump, err := httputil.DumpResponse(resp, true)
  		if err == nil {
  			fmt.Println(string(dump))
  		}
  	}
  
  	defer func() {
  		if rerr := resp.Body.Close(); err == nil {
  			err = rerr
  		}
  	}()
  
  	err = checkResponse(resp)
  	if err != nil {
  		return resp, err
  	}
  
  	if v != nil {
  		//bb, _ := ioutil.ReadAll(resp.Body)
  		//fmt.Println(string(bb))
  		//
  		//err := json.Unmarshal(bb, v)
  		//if err != nil {
  		//	return nil, err
  		//}
  
  		err = json.NewDecoder(resp.Body).Decode(v)
  		if err != nil {
  			return nil, err
  		}
  	}
  	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.