func (s *PluginsService) Install(opt *PluginsInstallOption) (resp *http.Response, err error) {
	err = s.ValidateInstallOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "plugins/install", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
Install Installs the latest version of a plugin specified by its key.<br/>Plugin information is retrieved from Update Center.<br/>Requires user to be authenticated with Administer System permissions
package sonargo
import "net/http"
type PluginsService struct {
	client *Client
}
type Plugin struct {
	Category              string    `json:"category,omitempty"`
	Description           string    `json:"description,omitempty"`
	EditionBundled        bool      `json:"editionBundled,omitempty"`
	Filename              string    `json:"filename,omitempty"`
	Hash                  string    `json:"hash,omitempty"`
	HomepageURL           string    `json:"homepageUrl,omitempty"`
	ImplementationBuild   string    `json:"implementationBuild,omitempty"`
	IssueTrackerURL       string    `json:"issueTrackerUrl,omitempty"`
	Key                   string    `json:"key,omitempty"`
	License               string    `json:"license,omitempty"`
	Name                  string    `json:"name,omitempty"`
	OrganizationName      string    `json:"organizationName,omitempty"`
	OrganizationURL       string    `json:"organizationUrl,omitempty"`
	Release               *Release  `json:"release,omitempty"`
	SonarLintSupported    bool      `json:"sonarLintSupported,omitempty"`
	TermsAndConditionsURL string    `json:"termsAndConditionsUrl,omitempty"`
	Update                *Update   `json:"update,omitempty"`
	Updates               []*Update `json:"updates,omitempty"`
	UpdatedAt             int64     `json:"updatedAt,omitempty"`
	Version               string    `json:"version,omitempty"`
}
type PluginsAvailableObject struct {
	Plugins             []*Plugin `json:"plugins,omitempty"`
	UpdateCenterRefresh string    `json:"updateCenterRefresh,omitempty"`
}
type Release struct {
	Date         string `json:"date,omitempty"`
	Version      string `json:"version,omitempty"`
	Description  string `json:"description,omitempty"`
	ChangeLogURL string `json:"changeLogUrl,omitempty"`
}
type Require struct {
	Description string `json:"description,omitempty"`
	Key         string `json:"key,omitempty"`
	Name        string `json:"name,omitempty"`
}
type Update struct {
	Release  *Release   `json:"release,omitempty"`
	Requires []*Require `json:"requires,omitempty"`
	Status   string     `json:"status,omitempty"`
}
type PluginsInstalledObject struct {
	Plugins []*Plugin `json:"plugins,omitempty"`
}
type PluginsPendingObject struct {
	Installing []*Plugin `json:"installing,omitempty"`
	Removing   []*Plugin `json:"removing,omitempty"`
	Updating   []*Plugin `json:"updating,omitempty"`
}
type PluginsUpdatesObject PluginsAvailableObject
func (s *PluginsService) Available() (v *PluginsAvailableObject, resp *http.Response, err error) {
	req, err := s.client.NewRequest("GET", "plugins/available", nil)
	if err != nil {
		return
	}
	v = new(PluginsAvailableObject)
	resp, err = s.client.Do(req, v)
	if err != nil {
		return nil, resp, err
	}
	return
}
func (s *PluginsService) CancelAll() (resp *http.Response, err error) {
	req, err := s.client.NewRequest("POST", "plugins/cancel_all", nil)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PluginsInstallOption struct {
	Key string `url:"key,omitempty"`  
}