code: func (k *Kite) getKites(args protocol.GetKitesArgs) ([]*Client, error) {
  	<-k.kontrol.readyConnected
  
  	response, err := k.kontrol.TellWithTimeout("getKites", k.Config.Timeout, args)
  	if err != nil {
  		return nil, err
  	}
  
  	var result = new(protocol.GetKitesResult)
  	err = response.Unmarshal(&result)
  	if err != nil {
  		return nil, err
  	}
  
  	clients := make([]*Client, len(result.Kites))
  	for i, currentKite := range result.Kites {
  		auth := &Auth{
  			Type: "token",
  			Key:  currentKite.Token,
  		}
  
  		clients[i] = k.NewClient(currentKite.URL)
  		clients[i].Kite = currentKite.Kite
  		clients[i].Auth = auth
  	}
  
  	// Renew tokens
  	for _, c := range clients {
  		token, err := NewTokenRenewer(c, k)
  		if err != nil {
  			k.Log.Error("Error in token. Token will not be renewed when it expires: %s", err)
  			continue
  		}
  
  		token.RenewWhenExpires()
  		c.closeRenewer = token.disconnect
  	}
  
  	return clients, nil
  }
docs: // used internally for GetKites() and WatchKites()