code: func (api *API) request(ctx context.Context, method, uri string, reqBody io.Reader, authType int, headers http.Header) (*http.Response, error) {
  	req, err := http.NewRequest(method, api.BaseURL+uri, reqBody)
  	if err != nil {
  		return nil, errors.Wrap(err, "HTTP request creation failed")
  	}
  	req.WithContext(ctx)
  
  	combinedHeaders := make(http.Header)
  	copyHeader(combinedHeaders, api.headers)
  	copyHeader(combinedHeaders, headers)
  	req.Header = combinedHeaders
  	if authType&AuthKeyEmail != 0 {
  		req.Header.Set("X-Auth-Key", api.APIKey)
  		req.Header.Set("X-Auth-Email", api.APIEmail)
  	}
  	if authType&AuthUserService != 0 {
  		req.Header.Set("X-Auth-User-Service-Key", api.APIUserServiceKey)
  	}
  	if api.UserAgent != "" {
  		req.Header.Set("User-Agent", api.UserAgent)
  	}
  
  	if req.Header.Get("Content-Type") == "" {
  		req.Header.Set("Content-Type", "application/json")
  	}
  
  	resp, err := api.httpClient.Do(req)
  	if err != nil {
  		return nil, errors.Wrap(err, "HTTP request failed")
  	}
  
  	return resp, nil
  }
docs: // request makes a HTTP request to the given API endpoint, returning the raw
  // *http.Response, or an error if one occurred. The caller is responsible for
  // closing the response body.