code: func (a *API) apiRequest(reqMethod string, reqPath string, data []byte) ([]byte, error) {
  	backoffs := []uint{2, 4, 8, 16, 32}
  	attempts := 0
  	success := false
  
  	var result []byte
  	var err error
  
  	for !success {
  		result, err = a.apiCall(reqMethod, reqPath, data)
  		if err == nil {
  			success = true
  		}
  
  		// break and return error if not using exponential backoff
  		if err != nil {
  			if !a.useExponentialBackoff {
  				break
  			}
  			if strings.Contains(err.Error(), "code 403") {
  				break
  			}
  		}
  
  		if !success {
  			var wait float64
  			if attempts >= len(backoffs) {
  				wait = backoff(backoffs[len(backoffs)-1])
  			} else {
  				wait = backoff(backoffs[attempts])
  			}
  			attempts++
  			a.Log.Printf("[WARN] API call failed %s, retrying in %d seconds.\n", err.Error(), uint(wait))
  			time.Sleep(time.Duration(wait) * time.Second)
  		}
  	}
  
  	return result, err
  }
docs: // apiRequest manages retry strategy for exponential backoffs