code: func newClient(opts ...Option) (*API, error) {
  	silentLogger := log.New(ioutil.Discard, "", log.LstdFlags)
  
  	api := &API{
  		BaseURL:     apiURL,
  		headers:     make(http.Header),
  		rateLimiter: rate.NewLimiter(rate.Limit(4), 1), // 4rps equates to default api limit (1200 req/5 min)
  		retryPolicy: RetryPolicy{
  			MaxRetries:    3,
  			MinRetryDelay: time.Duration(1) * time.Second,
  			MaxRetryDelay: time.Duration(30) * time.Second,
  		},
  		logger: silentLogger,
  	}
  
  	err := api.parseOptions(opts...)
  	if err != nil {
  		return nil, errors.Wrap(err, "options parsing failed")
  	}
  
  	// Fall back to http.DefaultClient if the package user does not provide
  	// their own.
  	if api.httpClient == nil {
  		api.httpClient = http.DefaultClient
  	}
  
  	return api, nil
  }
docs: // newClient provides shared logic for New and NewWithUserServiceKey