// Generated service client for heroku API. // // To be able to interact with this API, you have to // create a new service: // // s := heroku.NewService(nil) // // The Service struct has all the methods you need // to interact with heroku API. // package heroku import ( "bytes" "context" "encoding/json" "fmt" "io" "net/http" "reflect" "runtime" "time" "github.com/google/go-querystring/query" ) const ( Version = "v3" DefaultUserAgent = "heroku/" + Version + " (" + runtime.GOOS + "; " + runtime.GOARCH + ")" DefaultURL = "https://api.heroku.com" ) // Service represents your API. type Service struct { client *http.Client URL string } // NewService creates a Service using the given, if none is provided // it uses http.DefaultClient. func NewService(c *http.Client) *Service { if c == nil { c = http.DefaultClient } return &Service{ client: c, URL: DefaultURL, } } // NewRequest generates an HTTP request, but does not perform the request. func (s *Service) NewRequest(ctx context.Context, method, path string, body interface{}, q interface{}) (*http.Request, error) { var ctype string var rbody io.Reader switch t := body.(type) { case nil: case string: rbody = bytes.NewBufferString(t) case io.Reader: rbody = t default: v := reflect.ValueOf(body) if !v.IsValid() { break } if v.Type().Kind() == reflect.Ptr { v = reflect.Indirect(v) if !v.IsValid() { break } } j, err := json.Marshal(body) if err != nil { return nil, err } rbody = bytes.NewReader(j) ctype = "application/json" } req, err := http.NewRequest(method, s.URL+path, rbody) if err != nil { return nil, err } req = req.WithContext(ctx) if q != nil { v, err := query.Values(q) if err != nil { return nil, err } query := v.Encode() if req.URL.RawQuery != "" && query != "" { req.URL.RawQuery += "&" } req.URL.RawQuery += query } req.Header.Set("Accept", "application/json") req.Header.Set("User-Agent", DefaultUserAgent) if ctype != "" { req.Header.Set("Content-Type", ctype) } return req, nil } // Do sends a request and decodes the response into v. func (s *Service) Do(ctx context.Context, v interface{}, method, path string, body interface{}, q interface{}, lr *ListRange) error { req, err := s.NewRequest(ctx, method, path, body, q) if err != nil { return err } if lr != nil { lr.SetHeader(req) } resp, err := s.client.Do(req) if err != nil { return err } defer resp.Body.Close() switch t := v.(type) { case nil: case io.Writer: _, err = io.Copy(t, resp.Body) default: err = json.NewDecoder(resp.Body).Decode(v) } return err } // Get sends a GET request and decodes the response into v. func (s *Service) Get(ctx context.Context, v interface{}, path string, query interface{}, lr *ListRange) error { return s.Do(ctx, v, "GET", path, nil, query, lr) } // Patch sends a Path request and decodes the response into v. func (s *Service) Patch(ctx context.Context, v interface{}, path string, body interface{}) error { return s.Do(ctx, v, "PATCH", path, body, nil, nil) } // Post sends a POST request and decodes the response into v. func (s *Service) Post(ctx context.Context, v interface{}, path string, body interface{}) error { return s.Do(ctx, v, "POST", path, body, nil, nil) } // Put sends a PUT request and decodes the response into v. func (s *Service) Put(ctx context.Context, v interface{}, path string, body interface{}) error { return s.Do(ctx, v, "PUT", path, body, nil, nil) } // Delete sends a DELETE request. func (s *Service) Delete(ctx context.Context, v interface{}, path string) error { return s.Do(ctx, v, "DELETE", path, nil, nil, nil) } // ListRange describes a range. type ListRange struct { Field string Max int Descending bool FirstID string LastID string } // SetHeader set headers on the given Request. func (lr *ListRange) SetHeader(req *http.Request) { var hdrval string if lr.Field != "" { hdrval += lr.Field + " " } hdrval += lr.FirstID + ".." + lr.LastID if lr.Max != 0 { hdrval += fmt.Sprintf("; max=%d", lr.Max) if lr.Descending { hdrval += "; " } } if lr.Descending { hdrval += "order=desc" } req.Header.Set("Range", hdrval) return } // Bool allocates a new int value returns a pointer to it. func Bool(v bool) *bool { p := new(bool) *p = v return p } // Int allocates a new int value returns a pointer to it. func Int(v int) *int { p := new(int) *p = v return p } // Float64 allocates a new float64 value returns a pointer to it. func Float64(v float64) *float64 { p := new(float64) *p = v return p } // String allocates a new string value returns a pointer to it. func String(v string) *string { p := new(string) *p = v return p } // An account represents an individual signed up to use the Heroku // platform. type Account struct { AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created DefaultOrganization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"default_organization" url:"default_organization,key"` // organization selected by default DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account IdentityProvider *struct { ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` } `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users. LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku Name *string `json:"name" url:"name,key"` // full name of the account owner SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information } type AccountInfoResult struct { AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created DefaultOrganization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"default_organization" url:"default_organization,key"` // organization selected by default DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account IdentityProvider *struct { ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` } `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users. LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku Name *string `json:"name" url:"name,key"` // full name of the account owner SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information } // Info for account. func (s *Service) AccountInfo(ctx context.Context) (*AccountInfoResult, error) { var account AccountInfoResult return &account, s.Get(ctx, &account, fmt.Sprintf("/account"), nil, nil) } type AccountUpdateOpts struct { AllowTracking *bool `json:"allow_tracking,omitempty" url:"allow_tracking,omitempty,key"` // whether to allow third party web activity tracking Beta *bool `json:"beta,omitempty" url:"beta,omitempty,key"` // whether allowed to utilize beta Heroku features Name *string `json:"name,omitempty" url:"name,omitempty,key"` // full name of the account owner } type AccountUpdateResult struct { AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created DefaultOrganization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"default_organization" url:"default_organization,key"` // organization selected by default DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account IdentityProvider *struct { ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` } `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users. LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku Name *string `json:"name" url:"name,key"` // full name of the account owner SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information } // Update account. func (s *Service) AccountUpdate(ctx context.Context, o AccountUpdateOpts) (*AccountUpdateResult, error) { var account AccountUpdateResult return &account, s.Patch(ctx, &account, fmt.Sprintf("/account"), o) } type AccountDeleteResult struct { AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created DefaultOrganization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"default_organization" url:"default_organization,key"` // organization selected by default DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account IdentityProvider *struct { ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` } `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users. LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku Name *string `json:"name" url:"name,key"` // full name of the account owner SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information } // Delete account. Note that this action cannot be undone. func (s *Service) AccountDelete(ctx context.Context) (*AccountDeleteResult, error) { var account AccountDeleteResult return &account, s.Delete(ctx, &account, fmt.Sprintf("/account")) } // An account feature represents a Heroku labs capability that can be // enabled or disabled for an account on Heroku. type AccountFeature struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } type AccountFeatureInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } // Info for an existing account feature. func (s *Service) AccountFeatureInfo(ctx context.Context, accountFeatureIdentity string) (*AccountFeatureInfoResult, error) { var accountFeature AccountFeatureInfoResult return &accountFeature, s.Get(ctx, &accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), nil, nil) } type AccountFeatureListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } // List existing account features. func (s *Service) AccountFeatureList(ctx context.Context, lr *ListRange) (AccountFeatureListResult, error) { var accountFeature AccountFeatureListResult return accountFeature, s.Get(ctx, &accountFeature, fmt.Sprintf("/account/features"), nil, lr) } type AccountFeatureUpdateOpts struct { Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled } type AccountFeatureUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } // Update an existing account feature. func (s *Service) AccountFeatureUpdate(ctx context.Context, accountFeatureIdentity string, o AccountFeatureUpdateOpts) (*AccountFeatureUpdateResult, error) { var accountFeature AccountFeatureUpdateResult return &accountFeature, s.Patch(ctx, &accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), o) } // Add-ons represent add-ons that have been provisioned and attached to // one or more apps. type AddOn struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } type AddOnCreateOpts struct { Attachment *struct{} `json:"attachment,omitempty" url:"attachment,omitempty,key"` // name for add-on's initial attachment Config *map[string]string `json:"config,omitempty" url:"config,omitempty,key"` // custom add-on provisioning options Plan string `json:"plan" url:"plan,key"` // unique identifier of this plan } type AddOnCreateResult struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // Create a new add-on. func (s *Service) AddOnCreate(ctx context.Context, appIdentity string, o AddOnCreateOpts) (*AddOnCreateResult, error) { var addOn AddOnCreateResult return &addOn, s.Post(ctx, &addOn, fmt.Sprintf("/apps/%v/addons", appIdentity), o) } type AddOnDeleteResult struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // Delete an existing add-on. func (s *Service) AddOnDelete(ctx context.Context, appIdentity string, addOnIdentity string) (*AddOnDeleteResult, error) { var addOn AddOnDeleteResult return &addOn, s.Delete(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity)) } type AddOnInfoResult struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // Info for an existing add-on. func (s *Service) AddOnInfo(ctx context.Context, appIdentity string, addOnIdentity string) (*AddOnInfoResult, error) { var addOn AddOnInfoResult return &addOn, s.Get(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity), nil, nil) } type AddOnListResult []struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // List all existing add-ons. func (s *Service) AddOnList(ctx context.Context, lr *ListRange) (AddOnListResult, error) { var addOn AddOnListResult return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/addons"), nil, lr) } type AddOnListByUserResult []struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // List all existing add-ons a user has access to func (s *Service) AddOnListByUser(ctx context.Context, accountIdentity string, lr *ListRange) (AddOnListByUserResult, error) { var addOn AddOnListByUserResult return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/users/%v/addons", accountIdentity), nil, lr) } type AddOnListByAppResult []struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // List existing add-ons for an app. func (s *Service) AddOnListByApp(ctx context.Context, appIdentity string, lr *ListRange) (AddOnListByAppResult, error) { var addOn AddOnListByAppResult return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/apps/%v/addons", appIdentity), nil, lr) } type AddOnUpdateOpts struct { Plan string `json:"plan" url:"plan,key"` // unique identifier of this plan } // Change add-on plan. Some add-ons may not support changing plans. In // that case, an error will be returned. func (s *Service) AddOnUpdate(ctx context.Context, appIdentity string, addOnIdentity string, o AddOnUpdateOpts) (*AddOn, error) { var addOn AddOn return &addOn, s.Patch(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity), o) } // Add-on Actions are lifecycle operations for add-on provisioning and // deprovisioning. They allow whitelisted add-on providers to // (de)provision add-ons in the background and then report back when // (de)provisioning is complete. type AddOnAction struct{} type AddOnActionCreateProvisionResult struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // Mark an add-on as provisioned for use. func (s *Service) AddOnActionCreateProvision(ctx context.Context, addOnIdentity string) (*AddOnActionCreateProvisionResult, error) { var addOnAction AddOnActionCreateProvisionResult return &addOnAction, s.Post(ctx, &addOnAction, fmt.Sprintf("/addons/%v/actions/provision", addOnIdentity), nil) } type AddOnActionCreateDeprovisionResult struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // Mark an add-on as deprovisioned. func (s *Service) AddOnActionCreateDeprovision(ctx context.Context, addOnIdentity string) (*AddOnActionCreateDeprovisionResult, error) { var addOnAction AddOnActionCreateDeprovisionResult return &addOnAction, s.Post(ctx, &addOnAction, fmt.Sprintf("/addons/%v/actions/deprovision", addOnIdentity), nil) } // An add-on attachment represents a connection between an app and an // add-on that it has been given access to. type AddOnAttachment struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } type AddOnAttachmentCreateOpts struct { Addon string `json:"addon" url:"addon,key"` // unique identifier of add-on App string `json:"app" url:"app,key"` // unique identifier of app Force *bool `json:"force,omitempty" url:"force,omitempty,key"` // whether or not to allow existing attachment with same name to be // replaced Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name for this add-on attachment to this app } type AddOnAttachmentCreateResult struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // Create a new add-on attachment. func (s *Service) AddOnAttachmentCreate(ctx context.Context, o AddOnAttachmentCreateOpts) (*AddOnAttachmentCreateResult, error) { var addOnAttachment AddOnAttachmentCreateResult return &addOnAttachment, s.Post(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments"), o) } type AddOnAttachmentDeleteResult struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // Delete an existing add-on attachment. func (s *Service) AddOnAttachmentDelete(ctx context.Context, addOnAttachmentIdentity string) (*AddOnAttachmentDeleteResult, error) { var addOnAttachment AddOnAttachmentDeleteResult return &addOnAttachment, s.Delete(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments/%v", addOnAttachmentIdentity)) } type AddOnAttachmentInfoResult struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // Info for existing add-on attachment. func (s *Service) AddOnAttachmentInfo(ctx context.Context, addOnAttachmentIdentity string) (*AddOnAttachmentInfoResult, error) { var addOnAttachment AddOnAttachmentInfoResult return &addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments/%v", addOnAttachmentIdentity), nil, nil) } type AddOnAttachmentListResult []struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // List existing add-on attachments. func (s *Service) AddOnAttachmentList(ctx context.Context, lr *ListRange) (AddOnAttachmentListResult, error) { var addOnAttachment AddOnAttachmentListResult return addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments"), nil, lr) } type AddOnAttachmentListByAddOnResult []struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // List existing add-on attachments for an add-on. func (s *Service) AddOnAttachmentListByAddOn(ctx context.Context, addOnIdentity string, lr *ListRange) (AddOnAttachmentListByAddOnResult, error) { var addOnAttachment AddOnAttachmentListByAddOnResult return addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addons/%v/addon-attachments", addOnIdentity), nil, lr) } type AddOnAttachmentListByAppResult []struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // List existing add-on attachments for an app. func (s *Service) AddOnAttachmentListByApp(ctx context.Context, appIdentity string, lr *ListRange) (AddOnAttachmentListByAppResult, error) { var addOnAttachment AddOnAttachmentListByAppResult return addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/apps/%v/addon-attachments", appIdentity), nil, lr) } type AddOnAttachmentInfoByAppResult struct { Addon struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan } `json:"addon" url:"addon,key"` // identity of add-on App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application that is attached to add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on attachment was created ID string `json:"id" url:"id,key"` // unique identifier of this add-on attachment Name string `json:"name" url:"name,key"` // unique name for this add-on attachment to this app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on attachment was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on in attached app context } // Info for existing add-on attachment for an app. func (s *Service) AddOnAttachmentInfoByApp(ctx context.Context, appIdentity string, addOnAttachmentScopedIdentity string) (*AddOnAttachmentInfoByAppResult, error) { var addOnAttachment AddOnAttachmentInfoByAppResult return &addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/apps/%v/addon-attachments/%v", appIdentity, addOnAttachmentScopedIdentity), nil, nil) } // Configuration of an Add-on type AddOnConfig struct { Name string `json:"name" url:"name,key"` // unique name of the config Value *string `json:"value" url:"value,key"` // value of the config } type AddOnConfigListResult []struct { Name string `json:"name" url:"name,key"` // unique name of the config Value *string `json:"value" url:"value,key"` // value of the config } // Get an add-on's config. Accessible by customers with access and by // the add-on partner providing this add-on. func (s *Service) AddOnConfigList(ctx context.Context, addOnIdentity string, lr *ListRange) (AddOnConfigListResult, error) { var addOnConfig AddOnConfigListResult return addOnConfig, s.Get(ctx, &addOnConfig, fmt.Sprintf("/addons/%v/config", addOnIdentity), nil, lr) } type AddOnConfigUpdateOpts struct { Config *[]*struct { Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of the config Value *string `json:"value,omitempty" url:"value,omitempty,key"` // value of the config } `json:"config,omitempty" url:"config,omitempty,key"` } type AddOnConfigUpdateResult []struct { Name string `json:"name" url:"name,key"` // unique name of the config Value *string `json:"value" url:"value,key"` // value of the config } // Update an add-on's config. Can only be accessed by the add-on partner // providing this add-on. func (s *Service) AddOnConfigUpdate(ctx context.Context, addOnIdentity string, o AddOnConfigUpdateOpts) (AddOnConfigUpdateResult, error) { var addOnConfig AddOnConfigUpdateResult return addOnConfig, s.Patch(ctx, &addOnConfig, fmt.Sprintf("/addons/%v/config", addOnIdentity), o) } // Add-on Plan Actions are Provider functionality for specific add-on // installations type AddOnPlanAction struct { Action string `json:"action" url:"action,key"` // identifier of the action to take that is sent via SSO ID string `json:"id" url:"id,key"` // a unique identifier Label string `json:"label" url:"label,key"` // the display text shown in Dashboard RequiresOwner bool `json:"requires_owner" url:"requires_owner,key"` // if the action requires the user to own the app URL string `json:"url" url:"url,key"` // absolute URL to use instead of an action } // Add-on region capabilities represent the relationship between an // Add-on Service and a specific Region. Only Beta and GA add-ons are // returned by these endpoints. type AddOnRegionCapability struct { AddonService struct { CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service State string `json:"state" url:"state,key"` // release status for add-on service SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this // add-on at the same time SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different // app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated } `json:"addon_service" url:"addon_service,key"` // Add-on services represent add-ons that may be provisioned for apps. // Endpoints under add-on services can be accessed without // authentication. ID string `json:"id" url:"id,key"` // unique identifier of this add-on-region-capability Region struct { Country string `json:"country" url:"country,key"` // country where the region exists CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created Description string `json:"description" url:"description,key"` // description of region ID string `json:"id" url:"id,key"` // unique identifier of region Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists Name string `json:"name" url:"name,key"` // unique name of region PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space Provider struct { Name string `json:"name" url:"name,key"` // name of provider Region string `json:"region" url:"region,key"` // region name used by provider } `json:"provider" url:"provider,key"` // provider of underlying substrate UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated } `json:"region" url:"region,key"` // A region represents a geographic location in which your application // may run. SupportsPrivateNetworking bool `json:"supports_private_networking" url:"supports_private_networking,key"` // whether the add-on can be installed to a Space } type AddOnRegionCapabilityListResult []struct { AddonService struct { CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service State string `json:"state" url:"state,key"` // release status for add-on service SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this // add-on at the same time SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different // app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated } `json:"addon_service" url:"addon_service,key"` // Add-on services represent add-ons that may be provisioned for apps. // Endpoints under add-on services can be accessed without // authentication. ID string `json:"id" url:"id,key"` // unique identifier of this add-on-region-capability Region struct { Country string `json:"country" url:"country,key"` // country where the region exists CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created Description string `json:"description" url:"description,key"` // description of region ID string `json:"id" url:"id,key"` // unique identifier of region Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists Name string `json:"name" url:"name,key"` // unique name of region PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space Provider struct { Name string `json:"name" url:"name,key"` // name of provider Region string `json:"region" url:"region,key"` // region name used by provider } `json:"provider" url:"provider,key"` // provider of underlying substrate UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated } `json:"region" url:"region,key"` // A region represents a geographic location in which your application // may run. SupportsPrivateNetworking bool `json:"supports_private_networking" url:"supports_private_networking,key"` // whether the add-on can be installed to a Space } // List all existing add-on region capabilities. func (s *Service) AddOnRegionCapabilityList(ctx context.Context, lr *ListRange) (AddOnRegionCapabilityListResult, error) { var addOnRegionCapability AddOnRegionCapabilityListResult return addOnRegionCapability, s.Get(ctx, &addOnRegionCapability, fmt.Sprintf("/addon-region-capabilities"), nil, lr) } type AddOnRegionCapabilityListByAddOnServiceResult []struct { AddonService struct { CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service State string `json:"state" url:"state,key"` // release status for add-on service SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this // add-on at the same time SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different // app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated } `json:"addon_service" url:"addon_service,key"` // Add-on services represent add-ons that may be provisioned for apps. // Endpoints under add-on services can be accessed without // authentication. ID string `json:"id" url:"id,key"` // unique identifier of this add-on-region-capability Region struct { Country string `json:"country" url:"country,key"` // country where the region exists CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created Description string `json:"description" url:"description,key"` // description of region ID string `json:"id" url:"id,key"` // unique identifier of region Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists Name string `json:"name" url:"name,key"` // unique name of region PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space Provider struct { Name string `json:"name" url:"name,key"` // name of provider Region string `json:"region" url:"region,key"` // region name used by provider } `json:"provider" url:"provider,key"` // provider of underlying substrate UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated } `json:"region" url:"region,key"` // A region represents a geographic location in which your application // may run. SupportsPrivateNetworking bool `json:"supports_private_networking" url:"supports_private_networking,key"` // whether the add-on can be installed to a Space } // List existing add-on region capabilities for an add-on-service func (s *Service) AddOnRegionCapabilityListByAddOnService(ctx context.Context, addOnServiceIdentity string, lr *ListRange) (AddOnRegionCapabilityListByAddOnServiceResult, error) { var addOnRegionCapability AddOnRegionCapabilityListByAddOnServiceResult return addOnRegionCapability, s.Get(ctx, &addOnRegionCapability, fmt.Sprintf("/addon-services/%v/region-capabilities", addOnServiceIdentity), nil, lr) } // Add-on services represent add-ons that may be provisioned for apps. // Endpoints under add-on services can be accessed without // authentication. type AddOnService struct { CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service State string `json:"state" url:"state,key"` // release status for add-on service SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this // add-on at the same time SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different // app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated } type AddOnServiceInfoResult struct { CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service State string `json:"state" url:"state,key"` // release status for add-on service SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this // add-on at the same time SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different // app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated } // Info for existing add-on-service. func (s *Service) AddOnServiceInfo(ctx context.Context, addOnServiceIdentity string) (*AddOnServiceInfoResult, error) { var addOnService AddOnServiceInfoResult return &addOnService, s.Get(ctx, &addOnService, fmt.Sprintf("/addon-services/%v", addOnServiceIdentity), nil, nil) } type AddOnServiceListResult []struct { CliPluginName *string `json:"cli_plugin_name" url:"cli_plugin_name,key"` // npm package name of the add-on service's Heroku CLI plugin CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on-service was created HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service State string `json:"state" url:"state,key"` // release status for add-on service SupportsMultipleInstallations bool `json:"supports_multiple_installations" url:"supports_multiple_installations,key"` // whether or not apps can have access to more than one instance of this // add-on at the same time SupportsSharing bool `json:"supports_sharing" url:"supports_sharing,key"` // whether or not apps can have access to add-ons billed to a different // app UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on-service was updated } // List existing add-on-services. func (s *Service) AddOnServiceList(ctx context.Context, lr *ListRange) (AddOnServiceListResult, error) { var addOnService AddOnServiceListResult return addOnService, s.Get(ctx, &addOnService, fmt.Sprintf("/addon-services"), nil, lr) } // An app represents the program that you would like to deploy and run // on Heroku. type App struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } type AppCreateOpts struct { Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique identifier of region Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack } type AppCreateResult struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Create a new app. func (s *Service) AppCreate(ctx context.Context, o AppCreateOpts) (*AppCreateResult, error) { var app AppCreateResult return &app, s.Post(ctx, &app, fmt.Sprintf("/apps"), o) } type AppDeleteResult struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Delete an existing app. func (s *Service) AppDelete(ctx context.Context, appIdentity string) (*AppDeleteResult, error) { var app AppDeleteResult return &app, s.Delete(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity)) } type AppInfoResult struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Info for existing app. func (s *Service) AppInfo(ctx context.Context, appIdentity string) (*AppInfoResult, error) { var app AppInfoResult return &app, s.Get(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity), nil, nil) } type AppListResult []struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // List existing apps. func (s *Service) AppList(ctx context.Context, lr *ListRange) (AppListResult, error) { var app AppListResult return app, s.Get(ctx, &app, fmt.Sprintf("/apps"), nil, lr) } type AppListOwnedAndCollaboratedResult []struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // List owned and collaborated apps (excludes organization apps). func (s *Service) AppListOwnedAndCollaborated(ctx context.Context, accountIdentity string, lr *ListRange) (AppListOwnedAndCollaboratedResult, error) { var app AppListOwnedAndCollaboratedResult return app, s.Get(ctx, &app, fmt.Sprintf("/users/%v/apps", accountIdentity), nil, lr) } type AppUpdateOpts struct { BuildStack *string `json:"build_stack,omitempty" url:"build_stack,omitempty,key"` // unique name of stack Maintenance *bool `json:"maintenance,omitempty" url:"maintenance,omitempty,key"` // maintenance status of app Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app } type AppUpdateResult struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildStack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"build_stack" url:"build_stack,key"` // identity of the stack that will be used for new builds BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // identity of organization Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Update an existing app. func (s *Service) AppUpdate(ctx context.Context, appIdentity string, o AppUpdateOpts) (*AppUpdateResult, error) { var app AppUpdateResult return &app, s.Patch(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity), o) } // An app feature represents a Heroku labs capability that can be // enabled or disabled for an app on Heroku. type AppFeature struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app feature was created Description string `json:"description" url:"description,key"` // description of app feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of app feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of app feature Name string `json:"name" url:"name,key"` // unique name of app feature State string `json:"state" url:"state,key"` // state of app feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app feature was updated } type AppFeatureInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app feature was created Description string `json:"description" url:"description,key"` // description of app feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of app feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of app feature Name string `json:"name" url:"name,key"` // unique name of app feature State string `json:"state" url:"state,key"` // state of app feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app feature was updated } // Info for an existing app feature. func (s *Service) AppFeatureInfo(ctx context.Context, appIdentity string, appFeatureIdentity string) (*AppFeatureInfoResult, error) { var appFeature AppFeatureInfoResult return &appFeature, s.Get(ctx, &appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), nil, nil) } type AppFeatureListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app feature was created Description string `json:"description" url:"description,key"` // description of app feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of app feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of app feature Name string `json:"name" url:"name,key"` // unique name of app feature State string `json:"state" url:"state,key"` // state of app feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app feature was updated } // List existing app features. func (s *Service) AppFeatureList(ctx context.Context, appIdentity string, lr *ListRange) (AppFeatureListResult, error) { var appFeature AppFeatureListResult return appFeature, s.Get(ctx, &appFeature, fmt.Sprintf("/apps/%v/features", appIdentity), nil, lr) } type AppFeatureUpdateOpts struct { Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled } type AppFeatureUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app feature was created Description string `json:"description" url:"description,key"` // description of app feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of app feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not app feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of app feature Name string `json:"name" url:"name,key"` // unique name of app feature State string `json:"state" url:"state,key"` // state of app feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app feature was updated } // Update an existing app feature. func (s *Service) AppFeatureUpdate(ctx context.Context, appIdentity string, appFeatureIdentity string, o AppFeatureUpdateOpts) (*AppFeatureUpdateResult, error) { var appFeature AppFeatureUpdateResult return &appFeature, s.Patch(ctx, &appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), o) } // App formation set describes the combination of process types with // their quantities and sizes as well as application process tier type AppFormationSet struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app being described by the formation-set Description string `json:"description" url:"description,key"` // a string representation of the formation set ProcessTier string `json:"process_tier" url:"process_tier,key"` // application process tier UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // last time fomation-set was updated } // An app setup represents an app on Heroku that is setup using an // environment, addons, and scripts described in an app.json manifest // file. type AppSetup struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // identity of app Build *struct { ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Status string `json:"status" url:"status,key"` // status of build } `json:"build" url:"build,key"` // identity and status of build CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app setup was created FailureMessage *string `json:"failure_message" url:"failure_message,key"` // reason that app setup has failed ID string `json:"id" url:"id,key"` // unique identifier of app setup ManifestErrors []string `json:"manifest_errors" url:"manifest_errors,key"` // errors associated with invalid app.json manifest file Postdeploy *struct { ExitCode int `json:"exit_code" url:"exit_code,key"` // The exit code of the postdeploy script Output string `json:"output" url:"output,key"` // output of the postdeploy script } `json:"postdeploy" url:"postdeploy,key"` // result of postdeploy script ResolvedSuccessURL *string `json:"resolved_success_url" url:"resolved_success_url,key"` // fully qualified success url Status string `json:"status" url:"status,key"` // the overall status of app setup UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app setup was updated } type AppSetupCreateOpts struct { App *struct { Locked *bool `json:"locked,omitempty" url:"locked,omitempty,key"` // are other organization members forbidden from joining this app. Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app Organization *string `json:"organization,omitempty" url:"organization,omitempty,key"` // unique name of organization Personal *bool `json:"personal,omitempty" url:"personal,omitempty,key"` // force creation of the app in the user account even if a default org // is set. Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique name of region Space *string `json:"space,omitempty" url:"space,omitempty,key"` // unique name of space Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack } `json:"app,omitempty" url:"app,omitempty,key"` // optional parameters for created app Overrides *struct { Buildpacks *[]*struct { URL *string `json:"url,omitempty" url:"url,omitempty,key"` // location of the buildpack } `json:"buildpacks,omitempty" url:"buildpacks,omitempty,key"` // overrides the buildpacks specified in the app.json manifest file Env *map[string]string `json:"env,omitempty" url:"env,omitempty,key"` // overrides of the env specified in the app.json manifest file } `json:"overrides,omitempty" url:"overrides,omitempty,key"` // overrides of keys in the app.json manifest file SourceBlob struct { Checksum *string `json:"checksum,omitempty" url:"checksum,omitempty,key"` // an optional checksum of the gzipped tarball for verifying its // integrity URL *string `json:"url,omitempty" url:"url,omitempty,key"` // URL of gzipped tarball of source code containing app.json manifest // file Version *string `json:"version,omitempty" url:"version,omitempty,key"` // Version of the gzipped tarball. } `json:"source_blob" url:"source_blob,key"` // gzipped tarball of source code containing app.json manifest file } type AppSetupCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // identity of app Build *struct { ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Status string `json:"status" url:"status,key"` // status of build } `json:"build" url:"build,key"` // identity and status of build CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app setup was created FailureMessage *string `json:"failure_message" url:"failure_message,key"` // reason that app setup has failed ID string `json:"id" url:"id,key"` // unique identifier of app setup ManifestErrors []string `json:"manifest_errors" url:"manifest_errors,key"` // errors associated with invalid app.json manifest file Postdeploy *struct { ExitCode int `json:"exit_code" url:"exit_code,key"` // The exit code of the postdeploy script Output string `json:"output" url:"output,key"` // output of the postdeploy script } `json:"postdeploy" url:"postdeploy,key"` // result of postdeploy script ResolvedSuccessURL *string `json:"resolved_success_url" url:"resolved_success_url,key"` // fully qualified success url Status string `json:"status" url:"status,key"` // the overall status of app setup UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app setup was updated } // Create a new app setup from a gzipped tar archive containing an // app.json manifest file. func (s *Service) AppSetupCreate(ctx context.Context, o AppSetupCreateOpts) (*AppSetupCreateResult, error) { var appSetup AppSetupCreateResult return &appSetup, s.Post(ctx, &appSetup, fmt.Sprintf("/app-setups"), o) } type AppSetupInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // identity of app Build *struct { ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Status string `json:"status" url:"status,key"` // status of build } `json:"build" url:"build,key"` // identity and status of build CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app setup was created FailureMessage *string `json:"failure_message" url:"failure_message,key"` // reason that app setup has failed ID string `json:"id" url:"id,key"` // unique identifier of app setup ManifestErrors []string `json:"manifest_errors" url:"manifest_errors,key"` // errors associated with invalid app.json manifest file Postdeploy *struct { ExitCode int `json:"exit_code" url:"exit_code,key"` // The exit code of the postdeploy script Output string `json:"output" url:"output,key"` // output of the postdeploy script } `json:"postdeploy" url:"postdeploy,key"` // result of postdeploy script ResolvedSuccessURL *string `json:"resolved_success_url" url:"resolved_success_url,key"` // fully qualified success url Status string `json:"status" url:"status,key"` // the overall status of app setup UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app setup was updated } // Get the status of an app setup. func (s *Service) AppSetupInfo(ctx context.Context, appSetupIdentity string) (*AppSetupInfoResult, error) { var appSetup AppSetupInfoResult return &appSetup, s.Get(ctx, &appSetup, fmt.Sprintf("/app-setups/%v", appSetupIdentity), nil, nil) } // An app transfer represents a two party interaction for transferring // ownership of an app. type AppTransfer struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the transfer CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created ID string `json:"id" url:"id,key"` // unique identifier of app transfer Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of the owner of the transfer Recipient struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer State string `json:"state" url:"state,key"` // the current state of an app transfer UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated } type AppTransferCreateOpts struct { App string `json:"app" url:"app,key"` // unique identifier of app Recipient string `json:"recipient" url:"recipient,key"` // unique email address of account Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email notification when transferring apps } type AppTransferCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the transfer CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created ID string `json:"id" url:"id,key"` // unique identifier of app transfer Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of the owner of the transfer Recipient struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer State string `json:"state" url:"state,key"` // the current state of an app transfer UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated } // Create a new app transfer. func (s *Service) AppTransferCreate(ctx context.Context, o AppTransferCreateOpts) (*AppTransferCreateResult, error) { var appTransfer AppTransferCreateResult return &appTransfer, s.Post(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers"), o) } type AppTransferDeleteResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the transfer CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created ID string `json:"id" url:"id,key"` // unique identifier of app transfer Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of the owner of the transfer Recipient struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer State string `json:"state" url:"state,key"` // the current state of an app transfer UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated } // Delete an existing app transfer func (s *Service) AppTransferDelete(ctx context.Context, appTransferIdentity string) (*AppTransferDeleteResult, error) { var appTransfer AppTransferDeleteResult return &appTransfer, s.Delete(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity)) } type AppTransferInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the transfer CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created ID string `json:"id" url:"id,key"` // unique identifier of app transfer Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of the owner of the transfer Recipient struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer State string `json:"state" url:"state,key"` // the current state of an app transfer UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated } // Info for existing app transfer. func (s *Service) AppTransferInfo(ctx context.Context, appTransferIdentity string) (*AppTransferInfoResult, error) { var appTransfer AppTransferInfoResult return &appTransfer, s.Get(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), nil, nil) } type AppTransferListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the transfer CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created ID string `json:"id" url:"id,key"` // unique identifier of app transfer Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of the owner of the transfer Recipient struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer State string `json:"state" url:"state,key"` // the current state of an app transfer UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated } // List existing apps transfers. func (s *Service) AppTransferList(ctx context.Context, lr *ListRange) (AppTransferListResult, error) { var appTransfer AppTransferListResult return appTransfer, s.Get(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers"), nil, lr) } type AppTransferUpdateOpts struct { State string `json:"state" url:"state,key"` // the current state of an app transfer } type AppTransferUpdateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the transfer CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app transfer was created ID string `json:"id" url:"id,key"` // unique identifier of app transfer Owner struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of the owner of the transfer Recipient struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"recipient" url:"recipient,key"` // identity of the recipient of the transfer State string `json:"state" url:"state,key"` // the current state of an app transfer UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app transfer was updated } // Update an existing app transfer. func (s *Service) AppTransferUpdate(ctx context.Context, appTransferIdentity string, o AppTransferUpdateOpts) (*AppTransferUpdateResult, error) { var appTransfer AppTransferUpdateResult return &appTransfer, s.Patch(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), o) } // A build represents the process of transforming a code tarball into a // slug type Build struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app that the build belongs to Buildpacks *[]struct { URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpacks" url:"buildpacks,key"` // buildpacks executed for this build, in order CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when build was created ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Release *struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // release resulting from the build Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug created by this build SourceBlob struct { Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the gzipped tarball for verifying its // integrity URL string `json:"url" url:"url,key"` // URL where gzipped tar archive of source code for build was // downloaded. Version *string `json:"version" url:"version,key"` // Version of the gzipped tarball. } `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build Status string `json:"status" url:"status,key"` // status of build UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when build was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that started the build } type BuildCreateOpts struct { Buildpacks *[]*struct { URL *string `json:"url,omitempty" url:"url,omitempty,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpacks,omitempty" url:"buildpacks,omitempty,key"` // buildpacks executed for this build, in order SourceBlob struct { Checksum *string `json:"checksum,omitempty" url:"checksum,omitempty,key"` // an optional checksum of the gzipped tarball for verifying its // integrity URL *string `json:"url,omitempty" url:"url,omitempty,key"` // URL where gzipped tar archive of source code for build was // downloaded. Version *string `json:"version,omitempty" url:"version,omitempty,key"` // Version of the gzipped tarball. } `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build } type BuildCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app that the build belongs to Buildpacks *[]struct { URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpacks" url:"buildpacks,key"` // buildpacks executed for this build, in order CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when build was created ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Release *struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // release resulting from the build Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug created by this build SourceBlob struct { Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the gzipped tarball for verifying its // integrity URL string `json:"url" url:"url,key"` // URL where gzipped tar archive of source code for build was // downloaded. Version *string `json:"version" url:"version,key"` // Version of the gzipped tarball. } `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build Status string `json:"status" url:"status,key"` // status of build UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when build was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that started the build } // Create a new build. func (s *Service) BuildCreate(ctx context.Context, appIdentity string, o BuildCreateOpts) (*BuildCreateResult, error) { var build BuildCreateResult return &build, s.Post(ctx, &build, fmt.Sprintf("/apps/%v/builds", appIdentity), o) } type BuildInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app that the build belongs to Buildpacks *[]struct { URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpacks" url:"buildpacks,key"` // buildpacks executed for this build, in order CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when build was created ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Release *struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // release resulting from the build Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug created by this build SourceBlob struct { Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the gzipped tarball for verifying its // integrity URL string `json:"url" url:"url,key"` // URL where gzipped tar archive of source code for build was // downloaded. Version *string `json:"version" url:"version,key"` // Version of the gzipped tarball. } `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build Status string `json:"status" url:"status,key"` // status of build UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when build was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that started the build } // Info for existing build. func (s *Service) BuildInfo(ctx context.Context, appIdentity string, buildIdentity string) (*BuildInfoResult, error) { var build BuildInfoResult return &build, s.Get(ctx, &build, fmt.Sprintf("/apps/%v/builds/%v", appIdentity, buildIdentity), nil, nil) } type BuildListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app that the build belongs to Buildpacks *[]struct { URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpacks" url:"buildpacks,key"` // buildpacks executed for this build, in order CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when build was created ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Release *struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // release resulting from the build Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug created by this build SourceBlob struct { Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the gzipped tarball for verifying its // integrity URL string `json:"url" url:"url,key"` // URL where gzipped tar archive of source code for build was // downloaded. Version *string `json:"version" url:"version,key"` // Version of the gzipped tarball. } `json:"source_blob" url:"source_blob,key"` // location of gzipped tarball of source code used to create build Status string `json:"status" url:"status,key"` // status of build UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when build was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that started the build } // List existing build. func (s *Service) BuildList(ctx context.Context, appIdentity string, lr *ListRange) (BuildListResult, error) { var build BuildListResult return build, s.Get(ctx, &build, fmt.Sprintf("/apps/%v/builds", appIdentity), nil, lr) } // A build result contains the output from a build. type BuildResult struct { Build struct { ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Status string `json:"status" url:"status,key"` // status of build } `json:"build" url:"build,key"` // identity of build ExitCode float64 `json:"exit_code" url:"exit_code,key"` // status from the build Lines []struct { Line string `json:"line" url:"line,key"` // A line of output from the build. Stream string `json:"stream" url:"stream,key"` // The output stream where the line was sent. } `json:"lines" url:"lines,key"` // A list of all the lines of a build's output. This has been replaced // by the `output_stream_url` attribute on the build resource. } type BuildResultInfoResult struct { Build struct { ID string `json:"id" url:"id,key"` // unique identifier of build OutputStreamURL string `json:"output_stream_url" url:"output_stream_url,key"` // Build process output will be available from this URL as a stream. The // stream is available as either `text/plain` or `text/event-stream`. // Clients should be prepared to handle disconnects and can resume the // stream by sending a `Range` header (for `text/plain`) or a // `Last-Event-Id` header (for `text/event-stream`). Status string `json:"status" url:"status,key"` // status of build } `json:"build" url:"build,key"` // identity of build ExitCode float64 `json:"exit_code" url:"exit_code,key"` // status from the build Lines []struct { Line string `json:"line" url:"line,key"` // A line of output from the build. Stream string `json:"stream" url:"stream,key"` // The output stream where the line was sent. } `json:"lines" url:"lines,key"` // A list of all the lines of a build's output. This has been replaced // by the `output_stream_url` attribute on the build resource. } // Info for existing result. func (s *Service) BuildResultInfo(ctx context.Context, appIdentity string, buildIdentity string) (*BuildResultInfoResult, error) { var buildResult BuildResultInfoResult return &buildResult, s.Get(ctx, &buildResult, fmt.Sprintf("/apps/%v/builds/%v/result", appIdentity, buildIdentity), nil, nil) } // A buildpack installation represents a buildpack that will be run // against an app. type BuildpackInstallation struct { Buildpack struct { Name string `json:"name" url:"name,key"` // either the shorthand name (heroku official buildpacks) or url // (unofficial buildpacks) of the buildpack for the app URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpack" url:"buildpack,key"` // buildpack Ordinal int `json:"ordinal" url:"ordinal,key"` // determines the order in which the buildpacks will execute } type BuildpackInstallationUpdateOpts struct { Updates []struct { Buildpack string `json:"buildpack" url:"buildpack,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"updates" url:"updates,key"` // The buildpack attribute can accept a name, a url, or a urn. } type BuildpackInstallationUpdateResult []struct { Buildpack struct { Name string `json:"name" url:"name,key"` // either the shorthand name (heroku official buildpacks) or url // (unofficial buildpacks) of the buildpack for the app URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpack" url:"buildpack,key"` // buildpack Ordinal int `json:"ordinal" url:"ordinal,key"` // determines the order in which the buildpacks will execute } // Update an app's buildpack installations. func (s *Service) BuildpackInstallationUpdate(ctx context.Context, appIdentity string, o BuildpackInstallationUpdateOpts) (BuildpackInstallationUpdateResult, error) { var buildpackInstallation BuildpackInstallationUpdateResult return buildpackInstallation, s.Put(ctx, &buildpackInstallation, fmt.Sprintf("/apps/%v/buildpack-installations", appIdentity), o) } type BuildpackInstallationListResult []struct { Buildpack struct { Name string `json:"name" url:"name,key"` // either the shorthand name (heroku official buildpacks) or url // (unofficial buildpacks) of the buildpack for the app URL string `json:"url" url:"url,key"` // location of the buildpack for the app. Either a url (unofficial // buildpacks) or an internal urn (heroku official buildpacks). } `json:"buildpack" url:"buildpack,key"` // buildpack Ordinal int `json:"ordinal" url:"ordinal,key"` // determines the order in which the buildpacks will execute } // List an app's existing buildpack installations. func (s *Service) BuildpackInstallationList(ctx context.Context, appIdentity string, lr *ListRange) (BuildpackInstallationListResult, error) { var buildpackInstallation BuildpackInstallationListResult return buildpackInstallation, s.Get(ctx, &buildpackInstallation, fmt.Sprintf("/apps/%v/buildpack-installations", appIdentity), nil, lr) } // A collaborator represents an account that has been given access to an // app on Heroku. type Collaborator struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Permissions []struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } `json:"permissions" url:"permissions,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } type CollaboratorCreateOpts struct { Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email invitation when creating collaborator User string `json:"user" url:"user,key"` // unique email address of account } type CollaboratorCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Permissions []struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } `json:"permissions" url:"permissions,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Create a new collaborator. func (s *Service) CollaboratorCreate(ctx context.Context, appIdentity string, o CollaboratorCreateOpts) (*CollaboratorCreateResult, error) { var collaborator CollaboratorCreateResult return &collaborator, s.Post(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators", appIdentity), o) } type CollaboratorDeleteResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Permissions []struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } `json:"permissions" url:"permissions,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Delete an existing collaborator. func (s *Service) CollaboratorDelete(ctx context.Context, appIdentity string, collaboratorIdentity string) (*CollaboratorDeleteResult, error) { var collaborator CollaboratorDeleteResult return &collaborator, s.Delete(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity)) } type CollaboratorInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Permissions []struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } `json:"permissions" url:"permissions,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Info for existing collaborator. func (s *Service) CollaboratorInfo(ctx context.Context, appIdentity string, collaboratorIdentity string) (*CollaboratorInfoResult, error) { var collaborator CollaboratorInfoResult return &collaborator, s.Get(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity), nil, nil) } type CollaboratorListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Permissions []struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } `json:"permissions" url:"permissions,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // List existing collaborators. func (s *Service) CollaboratorList(ctx context.Context, appIdentity string, lr *ListRange) (CollaboratorListResult, error) { var collaborator CollaboratorListResult return collaborator, s.Get(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators", appIdentity), nil, lr) } // Config Vars allow you to manage the configuration information // provided to an app on Heroku. type ConfigVar map[string]string type ConfigVarInfoForAppResult map[string]*string // Get config-vars for app. func (s *Service) ConfigVarInfoForApp(ctx context.Context, appIdentity string) (ConfigVarInfoForAppResult, error) { var configVar ConfigVarInfoForAppResult return configVar, s.Get(ctx, &configVar, fmt.Sprintf("/apps/%v/config-vars", appIdentity), nil, nil) } type ConfigVarInfoForAppReleaseResult map[string]*string // Get config-vars for a release. func (s *Service) ConfigVarInfoForAppRelease(ctx context.Context, appIdentity string, releaseIdentity string) (ConfigVarInfoForAppReleaseResult, error) { var configVar ConfigVarInfoForAppReleaseResult return configVar, s.Get(ctx, &configVar, fmt.Sprintf("/apps/%v/releases/%v/config-vars", appIdentity, releaseIdentity), nil, nil) } type ConfigVarUpdateResult map[string]*string // Update config-vars for app. You can update existing config-vars by // setting them again, and remove by setting it to `null`. func (s *Service) ConfigVarUpdate(ctx context.Context, appIdentity string, o map[string]*string) (ConfigVarUpdateResult, error) { var configVar ConfigVarUpdateResult return configVar, s.Patch(ctx, &configVar, fmt.Sprintf("/apps/%v/config-vars", appIdentity), o) } // A credit represents value that will be used up before further charges // are assigned to an account. type Credit struct { Amount float64 `json:"amount" url:"amount,key"` // total value of credit in cents Balance float64 `json:"balance" url:"balance,key"` // remaining value of credit in cents CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when credit was created ExpiresAt time.Time `json:"expires_at" url:"expires_at,key"` // when credit will expire ID string `json:"id" url:"id,key"` // unique identifier of credit Title string `json:"title" url:"title,key"` // a name for credit UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when credit was updated } type CreditCreateOpts struct { Code1 *string `json:"code1,omitempty" url:"code1,omitempty,key"` // first code from a discount card Code2 *string `json:"code2,omitempty" url:"code2,omitempty,key"` // second code from a discount card } type CreditCreateResult struct { Amount float64 `json:"amount" url:"amount,key"` // total value of credit in cents Balance float64 `json:"balance" url:"balance,key"` // remaining value of credit in cents CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when credit was created ExpiresAt time.Time `json:"expires_at" url:"expires_at,key"` // when credit will expire ID string `json:"id" url:"id,key"` // unique identifier of credit Title string `json:"title" url:"title,key"` // a name for credit UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when credit was updated } // Create a new credit. func (s *Service) CreditCreate(ctx context.Context, o CreditCreateOpts) (*CreditCreateResult, error) { var credit CreditCreateResult return &credit, s.Post(ctx, &credit, fmt.Sprintf("/account/credits"), o) } type CreditInfoResult struct { Amount float64 `json:"amount" url:"amount,key"` // total value of credit in cents Balance float64 `json:"balance" url:"balance,key"` // remaining value of credit in cents CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when credit was created ExpiresAt time.Time `json:"expires_at" url:"expires_at,key"` // when credit will expire ID string `json:"id" url:"id,key"` // unique identifier of credit Title string `json:"title" url:"title,key"` // a name for credit UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when credit was updated } // Info for existing credit. func (s *Service) CreditInfo(ctx context.Context, creditIdentity string) (*CreditInfoResult, error) { var credit CreditInfoResult return &credit, s.Get(ctx, &credit, fmt.Sprintf("/account/credits/%v", creditIdentity), nil, nil) } type CreditListResult []struct { Amount float64 `json:"amount" url:"amount,key"` // total value of credit in cents Balance float64 `json:"balance" url:"balance,key"` // remaining value of credit in cents CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when credit was created ExpiresAt time.Time `json:"expires_at" url:"expires_at,key"` // when credit will expire ID string `json:"id" url:"id,key"` // unique identifier of credit Title string `json:"title" url:"title,key"` // a name for credit UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when credit was updated } // List existing credits. func (s *Service) CreditList(ctx context.Context, lr *ListRange) (CreditListResult, error) { var credit CreditListResult return credit, s.Get(ctx, &credit, fmt.Sprintf("/account/credits"), nil, lr) } // Domains define what web routes should be routed to an app on Heroku. type Domain struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app that owns the domain CName *string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when domain was created Hostname string `json:"hostname" url:"hostname,key"` // full hostname ID string `json:"id" url:"id,key"` // unique identifier of this domain Kind string `json:"kind" url:"kind,key"` // type of domain name Status string `json:"status" url:"status,key"` // status of this record's cname UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when domain was updated } type DomainCreateOpts struct { Hostname string `json:"hostname" url:"hostname,key"` // full hostname } type DomainCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app that owns the domain CName *string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when domain was created Hostname string `json:"hostname" url:"hostname,key"` // full hostname ID string `json:"id" url:"id,key"` // unique identifier of this domain Kind string `json:"kind" url:"kind,key"` // type of domain name Status string `json:"status" url:"status,key"` // status of this record's cname UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when domain was updated } // Create a new domain. func (s *Service) DomainCreate(ctx context.Context, appIdentity string, o DomainCreateOpts) (*DomainCreateResult, error) { var domain DomainCreateResult return &domain, s.Post(ctx, &domain, fmt.Sprintf("/apps/%v/domains", appIdentity), o) } type DomainDeleteResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app that owns the domain CName *string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when domain was created Hostname string `json:"hostname" url:"hostname,key"` // full hostname ID string `json:"id" url:"id,key"` // unique identifier of this domain Kind string `json:"kind" url:"kind,key"` // type of domain name Status string `json:"status" url:"status,key"` // status of this record's cname UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when domain was updated } // Delete an existing domain func (s *Service) DomainDelete(ctx context.Context, appIdentity string, domainIdentity string) (*DomainDeleteResult, error) { var domain DomainDeleteResult return &domain, s.Delete(ctx, &domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity)) } type DomainInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app that owns the domain CName *string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when domain was created Hostname string `json:"hostname" url:"hostname,key"` // full hostname ID string `json:"id" url:"id,key"` // unique identifier of this domain Kind string `json:"kind" url:"kind,key"` // type of domain name Status string `json:"status" url:"status,key"` // status of this record's cname UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when domain was updated } // Info for existing domain. func (s *Service) DomainInfo(ctx context.Context, appIdentity string, domainIdentity string) (*DomainInfoResult, error) { var domain DomainInfoResult return &domain, s.Get(ctx, &domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity), nil, nil) } type DomainListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app that owns the domain CName *string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when domain was created Hostname string `json:"hostname" url:"hostname,key"` // full hostname ID string `json:"id" url:"id,key"` // unique identifier of this domain Kind string `json:"kind" url:"kind,key"` // type of domain name Status string `json:"status" url:"status,key"` // status of this record's cname UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when domain was updated } // List existing domains. func (s *Service) DomainList(ctx context.Context, appIdentity string, lr *ListRange) (DomainListResult, error) { var domain DomainListResult return domain, s.Get(ctx, &domain, fmt.Sprintf("/apps/%v/domains", appIdentity), nil, lr) } // Dynos encapsulate running processes of an app on Heroku. Detailed // information about dyno sizes can be found at: // [https://devcenter.heroku.com/articles/dyno-types](https://devcenter.h // eroku.com/articles/dyno-types). type Dyno struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to AttachURL *string `json:"attach_url" url:"attach_url,key"` // a URL to stream output from for attached processes or null for // non-attached processes Command string `json:"command" url:"command,key"` // command used to start this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when dyno was created ID string `json:"id" url:"id,key"` // unique identifier of this dyno Name string `json:"name" url:"name,key"` // the name of this process on this dyno Release struct { ID string `json:"id" url:"id,key"` // unique identifier of release Version int `json:"version" url:"version,key"` // unique version assigned to the release } `json:"release" url:"release,key"` // app release of the dyno Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") State string `json:"state" url:"state,key"` // current status of process (either: crashed, down, idle, starting, or // up) Type string `json:"type" url:"type,key"` // type of process UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when process last changed state } type DynoCreateOpts struct { Attach *bool `json:"attach,omitempty" url:"attach,omitempty,key"` // whether to stream output or not Command string `json:"command" url:"command,key"` // command used to start this process Env *map[string]string `json:"env,omitempty" url:"env,omitempty,key"` // custom environment to add to the dyno config vars ForceNoTty *bool `json:"force_no_tty,omitempty" url:"force_no_tty,omitempty,key"` // force an attached one-off dyno to not run in a tty Size *string `json:"size,omitempty" url:"size,omitempty,key"` // dyno size (default: "standard-1X") TimeToLive *int `json:"time_to_live,omitempty" url:"time_to_live,omitempty,key"` // seconds until dyno expires, after which it will soon be killed Type *string `json:"type,omitempty" url:"type,omitempty,key"` // type of process } type DynoCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to AttachURL *string `json:"attach_url" url:"attach_url,key"` // a URL to stream output from for attached processes or null for // non-attached processes Command string `json:"command" url:"command,key"` // command used to start this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when dyno was created ID string `json:"id" url:"id,key"` // unique identifier of this dyno Name string `json:"name" url:"name,key"` // the name of this process on this dyno Release struct { ID string `json:"id" url:"id,key"` // unique identifier of release Version int `json:"version" url:"version,key"` // unique version assigned to the release } `json:"release" url:"release,key"` // app release of the dyno Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") State string `json:"state" url:"state,key"` // current status of process (either: crashed, down, idle, starting, or // up) Type string `json:"type" url:"type,key"` // type of process UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when process last changed state } // Create a new dyno. func (s *Service) DynoCreate(ctx context.Context, appIdentity string, o DynoCreateOpts) (*DynoCreateResult, error) { var dyno DynoCreateResult return &dyno, s.Post(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity), o) } type DynoRestartResult struct{} // Restart dyno. func (s *Service) DynoRestart(ctx context.Context, appIdentity string, dynoIdentity string) (DynoRestartResult, error) { var dyno DynoRestartResult return dyno, s.Delete(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity)) } type DynoRestartAllResult struct{} // Restart all dynos. func (s *Service) DynoRestartAll(ctx context.Context, appIdentity string) (DynoRestartAllResult, error) { var dyno DynoRestartAllResult return dyno, s.Delete(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity)) } type DynoStopResult struct{} // Stop dyno. func (s *Service) DynoStop(ctx context.Context, appIdentity string, dynoIdentity string) (DynoStopResult, error) { var dyno DynoStopResult return dyno, s.Post(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v/actions/stop", appIdentity, dynoIdentity), nil) } type DynoInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to AttachURL *string `json:"attach_url" url:"attach_url,key"` // a URL to stream output from for attached processes or null for // non-attached processes Command string `json:"command" url:"command,key"` // command used to start this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when dyno was created ID string `json:"id" url:"id,key"` // unique identifier of this dyno Name string `json:"name" url:"name,key"` // the name of this process on this dyno Release struct { ID string `json:"id" url:"id,key"` // unique identifier of release Version int `json:"version" url:"version,key"` // unique version assigned to the release } `json:"release" url:"release,key"` // app release of the dyno Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") State string `json:"state" url:"state,key"` // current status of process (either: crashed, down, idle, starting, or // up) Type string `json:"type" url:"type,key"` // type of process UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when process last changed state } // Info for existing dyno. func (s *Service) DynoInfo(ctx context.Context, appIdentity string, dynoIdentity string) (*DynoInfoResult, error) { var dyno DynoInfoResult return &dyno, s.Get(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity), nil, nil) } type DynoListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to AttachURL *string `json:"attach_url" url:"attach_url,key"` // a URL to stream output from for attached processes or null for // non-attached processes Command string `json:"command" url:"command,key"` // command used to start this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when dyno was created ID string `json:"id" url:"id,key"` // unique identifier of this dyno Name string `json:"name" url:"name,key"` // the name of this process on this dyno Release struct { ID string `json:"id" url:"id,key"` // unique identifier of release Version int `json:"version" url:"version,key"` // unique version assigned to the release } `json:"release" url:"release,key"` // app release of the dyno Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") State string `json:"state" url:"state,key"` // current status of process (either: crashed, down, idle, starting, or // up) Type string `json:"type" url:"type,key"` // type of process UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when process last changed state } // List existing dynos. func (s *Service) DynoList(ctx context.Context, appIdentity string, lr *ListRange) (DynoListResult, error) { var dyno DynoListResult return dyno, s.Get(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos", appIdentity), nil, lr) } // Dyno sizes are the values and details of sizes that can be assigned // to dynos. This information can also be found at : // [https://devcenter.heroku.com/articles/dyno-types](https://devcenter.h // eroku.com/articles/dyno-types). type DynoSize struct { Compute int `json:"compute" url:"compute,key"` // minimum vCPUs, non-dedicated may get more depending on load Cost *struct{} `json:"cost" url:"cost,key"` // price information for this dyno size Dedicated bool `json:"dedicated" url:"dedicated,key"` // whether this dyno will be dedicated to one user DynoUnits int `json:"dyno_units" url:"dyno_units,key"` // unit of consumption for Heroku Enterprise customers ID string `json:"id" url:"id,key"` // unique identifier of this dyno size Memory float64 `json:"memory" url:"memory,key"` // amount of RAM in GB Name string `json:"name" url:"name,key"` // the name of this dyno-size PrivateSpaceOnly bool `json:"private_space_only" url:"private_space_only,key"` // whether this dyno can only be provisioned in a private space } type DynoSizeInfoResult struct { Compute int `json:"compute" url:"compute,key"` // minimum vCPUs, non-dedicated may get more depending on load Cost *struct{} `json:"cost" url:"cost,key"` // price information for this dyno size Dedicated bool `json:"dedicated" url:"dedicated,key"` // whether this dyno will be dedicated to one user DynoUnits int `json:"dyno_units" url:"dyno_units,key"` // unit of consumption for Heroku Enterprise customers ID string `json:"id" url:"id,key"` // unique identifier of this dyno size Memory float64 `json:"memory" url:"memory,key"` // amount of RAM in GB Name string `json:"name" url:"name,key"` // the name of this dyno-size PrivateSpaceOnly bool `json:"private_space_only" url:"private_space_only,key"` // whether this dyno can only be provisioned in a private space } // Info for existing dyno size. func (s *Service) DynoSizeInfo(ctx context.Context, dynoSizeIdentity string) (*DynoSizeInfoResult, error) { var dynoSize DynoSizeInfoResult return &dynoSize, s.Get(ctx, &dynoSize, fmt.Sprintf("/dyno-sizes/%v", dynoSizeIdentity), nil, nil) } type DynoSizeListResult []struct { Compute int `json:"compute" url:"compute,key"` // minimum vCPUs, non-dedicated may get more depending on load Cost *struct{} `json:"cost" url:"cost,key"` // price information for this dyno size Dedicated bool `json:"dedicated" url:"dedicated,key"` // whether this dyno will be dedicated to one user DynoUnits int `json:"dyno_units" url:"dyno_units,key"` // unit of consumption for Heroku Enterprise customers ID string `json:"id" url:"id,key"` // unique identifier of this dyno size Memory float64 `json:"memory" url:"memory,key"` // amount of RAM in GB Name string `json:"name" url:"name,key"` // the name of this dyno-size PrivateSpaceOnly bool `json:"private_space_only" url:"private_space_only,key"` // whether this dyno can only be provisioned in a private space } // List existing dyno sizes. func (s *Service) DynoSizeList(ctx context.Context, lr *ListRange) (DynoSizeListResult, error) { var dynoSize DynoSizeListResult return dynoSize, s.Get(ctx, &dynoSize, fmt.Sprintf("/dyno-sizes"), nil, lr) } // An event represents an action performed on another API resource. type Event struct { Action string `json:"action" url:"action,key"` // the operation performed on the resource Actor struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"actor" url:"actor,key"` // user that performed the operation CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the event was created Data struct { AllowTracking bool `json:"allow_tracking" url:"allow_tracking,key"` // whether to allow third party web activity tracking Beta bool `json:"beta" url:"beta,key"` // whether allowed to utilize beta Heroku features CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account was created DefaultOrganization *struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"default_organization" url:"default_organization,key"` // organization selected by default DelinquentAt *time.Time `json:"delinquent_at" url:"delinquent_at,key"` // when account became delinquent Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account IdentityProvider *struct { ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` } `json:"identity_provider" url:"identity_provider,key"` // Identity Provider details for federated users. LastLogin *time.Time `json:"last_login" url:"last_login,key"` // when account last authorized with Heroku Name *string `json:"name" url:"name,key"` // full name of the account owner SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account SuspendedAt *time.Time `json:"suspended_at" url:"suspended_at,key"` // when account was suspended TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether two-factor auth is enabled on the account UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account was updated Verified bool `json:"verified" url:"verified,key"` // whether account has been verified with billing information } `json:"data" url:"data,key"` // An account represents an individual signed up to use the Heroku // platform. ID string `json:"id" url:"id,key"` // unique identifier of an event PreviousData struct{} `json:"previous_data" url:"previous_data,key"` // data fields that were changed during update with previous values PublishedAt *time.Time `json:"published_at" url:"published_at,key"` // when the event was published Resource string `json:"resource" url:"resource,key"` // the type of resource affected Sequence *string `json:"sequence" url:"sequence,key"` // a numeric string representing the event's sequence UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the event was updated (same as created) Version string `json:"version" url:"version,key"` // the event's API version string } // A failed event represents a failure of an action performed on another // API resource. type FailedEvent struct { Action string `json:"action" url:"action,key"` // The attempted operation performed on the resource. Code *int `json:"code" url:"code,key"` // An HTTP status code. ErrorID *string `json:"error_id" url:"error_id,key"` // ID of error raised. Message string `json:"message" url:"message,key"` // A detailed error message. Method string `json:"method" url:"method,key"` // The HTTP method type of the failed action. Path string `json:"path" url:"path,key"` // The path of the attempted operation. Resource *struct { ID string `json:"id" url:"id,key"` // Unique identifier of a resource. Name string `json:"name" url:"name,key"` // the type of resource affected } `json:"resource" url:"resource,key"` // The related resource of the failed action. } // Filters are special endpoints to allow for API consumers to specify a // subset of resources to consume in order to reduce the number of // requests that are performed. Each filter endpoint endpoint is // responsible for determining its supported request format. The // endpoints are over POST in order to handle large request bodies // without hitting request uri query length limitations, but the // requests themselves are idempotent and will not have side effects. type FilterApps struct{} type FilterAppsAppsOpts struct { In *struct { ID *[]*string `json:"id,omitempty" url:"id,omitempty,key"` } `json:"in,omitempty" url:"in,omitempty,key"` } type FilterAppsAppsResult []struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app. Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this app Owner *struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Request an apps list filtered by app id. func (s *Service) FilterAppsApps(ctx context.Context, o FilterAppsAppsOpts) (FilterAppsAppsResult, error) { var filterApps FilterAppsAppsResult return filterApps, s.Post(ctx, &filterApps, fmt.Sprintf("/filters/apps"), o) } // The formation of processes that should be maintained for an app. // Update the formation to scale processes or change dyno sizes. // Available process type names and commands are defined by the // `process_types` attribute for the [slug](#slug) currently released on // an app. type Formation struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to Command string `json:"command" url:"command,key"` // command to use to launch this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when process type was created ID string `json:"id" url:"id,key"` // unique identifier of this process type Quantity int `json:"quantity" url:"quantity,key"` // number of processes to maintain Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") Type string `json:"type" url:"type,key"` // type of process to maintain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when dyno type was updated } type FormationInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to Command string `json:"command" url:"command,key"` // command to use to launch this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when process type was created ID string `json:"id" url:"id,key"` // unique identifier of this process type Quantity int `json:"quantity" url:"quantity,key"` // number of processes to maintain Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") Type string `json:"type" url:"type,key"` // type of process to maintain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when dyno type was updated } // Info for a process type func (s *Service) FormationInfo(ctx context.Context, appIdentity string, formationIdentity string) (*FormationInfoResult, error) { var formation FormationInfoResult return &formation, s.Get(ctx, &formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), nil, nil) } type FormationListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to Command string `json:"command" url:"command,key"` // command to use to launch this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when process type was created ID string `json:"id" url:"id,key"` // unique identifier of this process type Quantity int `json:"quantity" url:"quantity,key"` // number of processes to maintain Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") Type string `json:"type" url:"type,key"` // type of process to maintain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when dyno type was updated } // List process type formation func (s *Service) FormationList(ctx context.Context, appIdentity string, lr *ListRange) (FormationListResult, error) { var formation FormationListResult return formation, s.Get(ctx, &formation, fmt.Sprintf("/apps/%v/formation", appIdentity), nil, lr) } type FormationBatchUpdateOpts struct { Updates []struct { Quantity *int `json:"quantity,omitempty" url:"quantity,omitempty,key"` // number of processes to maintain Size *string `json:"size,omitempty" url:"size,omitempty,key"` // dyno size (default: "standard-1X") Type string `json:"type" url:"type,key"` // type of process to maintain } `json:"updates" url:"updates,key"` // Array with formation updates. Each element must have "type", the id // or name of the process type to be updated, and can optionally update // its "quantity" or "size". } type FormationBatchUpdateResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to Command string `json:"command" url:"command,key"` // command to use to launch this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when process type was created ID string `json:"id" url:"id,key"` // unique identifier of this process type Quantity int `json:"quantity" url:"quantity,key"` // number of processes to maintain Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") Type string `json:"type" url:"type,key"` // type of process to maintain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when dyno type was updated } // Batch update process types func (s *Service) FormationBatchUpdate(ctx context.Context, appIdentity string, o FormationBatchUpdateOpts) (FormationBatchUpdateResult, error) { var formation FormationBatchUpdateResult return formation, s.Patch(ctx, &formation, fmt.Sprintf("/apps/%v/formation", appIdentity), o) } type FormationUpdateOpts struct { Quantity *int `json:"quantity,omitempty" url:"quantity,omitempty,key"` // number of processes to maintain Size *string `json:"size,omitempty" url:"size,omitempty,key"` // dyno size (default: "standard-1X") } type FormationUpdateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app formation belongs to Command string `json:"command" url:"command,key"` // command to use to launch this process CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when process type was created ID string `json:"id" url:"id,key"` // unique identifier of this process type Quantity int `json:"quantity" url:"quantity,key"` // number of processes to maintain Size string `json:"size" url:"size,key"` // dyno size (default: "standard-1X") Type string `json:"type" url:"type,key"` // type of process to maintain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when dyno type was updated } // Update process type func (s *Service) FormationUpdate(ctx context.Context, appIdentity string, formationIdentity string, o FormationUpdateOpts) (*FormationUpdateResult, error) { var formation FormationUpdateResult return &formation, s.Patch(ctx, &formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), o) } // Identity Providers represent the SAML configuration of an // Organization. type IdentityProvider struct { Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file) CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when provider record was created EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization associated with this identity provider SloTargetURL string `json:"slo_target_url" url:"slo_target_url,key"` // single log out URL for this identity provider SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the identity provider record was updated } type IdentityProviderListResult []struct { Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file) CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when provider record was created EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization associated with this identity provider SloTargetURL string `json:"slo_target_url" url:"slo_target_url,key"` // single log out URL for this identity provider SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the identity provider record was updated } // Get a list of an organization's Identity Providers func (s *Service) IdentityProviderList(ctx context.Context, organizationName string, lr *ListRange) (IdentityProviderListResult, error) { var identityProvider IdentityProviderListResult return identityProvider, s.Get(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers", organizationName), nil, lr) } type IdentityProviderCreateOpts struct { Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file) EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider SloTargetURL *string `json:"slo_target_url,omitempty" url:"slo_target_url,omitempty,key"` // single log out URL for this identity provider SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider } type IdentityProviderCreateResult struct { Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file) CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when provider record was created EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization associated with this identity provider SloTargetURL string `json:"slo_target_url" url:"slo_target_url,key"` // single log out URL for this identity provider SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the identity provider record was updated } // Create an Identity Provider for an organization func (s *Service) IdentityProviderCreate(ctx context.Context, organizationName string, o IdentityProviderCreateOpts) (*IdentityProviderCreateResult, error) { var identityProvider IdentityProviderCreateResult return &identityProvider, s.Post(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers", organizationName), o) } type IdentityProviderUpdateOpts struct { Certificate *string `json:"certificate,omitempty" url:"certificate,omitempty,key"` // raw contents of the public certificate (eg: .crt or .pem file) EntityID *string `json:"entity_id,omitempty" url:"entity_id,omitempty,key"` // URL identifier provided by the identity provider SloTargetURL *string `json:"slo_target_url,omitempty" url:"slo_target_url,omitempty,key"` // single log out URL for this identity provider SsoTargetURL *string `json:"sso_target_url,omitempty" url:"sso_target_url,omitempty,key"` // single sign on URL for this identity provider } type IdentityProviderUpdateResult struct { Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file) CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when provider record was created EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization associated with this identity provider SloTargetURL string `json:"slo_target_url" url:"slo_target_url,key"` // single log out URL for this identity provider SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the identity provider record was updated } // Update an organization's Identity Provider func (s *Service) IdentityProviderUpdate(ctx context.Context, organizationName string, identityProviderID string, o IdentityProviderUpdateOpts) (*IdentityProviderUpdateResult, error) { var identityProvider IdentityProviderUpdateResult return &identityProvider, s.Patch(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers/%v", organizationName, identityProviderID), o) } type IdentityProviderDeleteResult struct { Certificate string `json:"certificate" url:"certificate,key"` // raw contents of the public certificate (eg: .crt or .pem file) CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when provider record was created EntityID string `json:"entity_id" url:"entity_id,key"` // URL identifier provided by the identity provider ID string `json:"id" url:"id,key"` // unique identifier of this identity provider Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization associated with this identity provider SloTargetURL string `json:"slo_target_url" url:"slo_target_url,key"` // single log out URL for this identity provider SsoTargetURL string `json:"sso_target_url" url:"sso_target_url,key"` // single sign on URL for this identity provider UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the identity provider record was updated } // Delete an organization's Identity Provider func (s *Service) IdentityProviderDelete(ctx context.Context, organizationName string, identityProviderID string) (*IdentityProviderDeleteResult, error) { var identityProvider IdentityProviderDeleteResult return &identityProvider, s.Delete(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers/%v", organizationName, identityProviderID)) } // An inbound-ruleset is a collection of rules that specify what hosts // can or cannot connect to an application. type InboundRuleset struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when inbound-ruleset was created CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an inbound-ruleset Rules []struct { Action string `json:"action" url:"action,key"` // states whether the connection is allowed or denied Source string `json:"source" url:"source,key"` // is the request’s source in CIDR notation } `json:"rules" url:"rules,key"` } type InboundRulesetInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when inbound-ruleset was created CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an inbound-ruleset Rules []struct { Action string `json:"action" url:"action,key"` // states whether the connection is allowed or denied Source string `json:"source" url:"source,key"` // is the request’s source in CIDR notation } `json:"rules" url:"rules,key"` } // Current inbound ruleset for a space func (s *Service) InboundRulesetInfo(ctx context.Context, spaceIdentity string) (*InboundRulesetInfoResult, error) { var inboundRuleset InboundRulesetInfoResult return &inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-ruleset", spaceIdentity), nil, nil) } type InboundRulesetListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when inbound-ruleset was created CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an inbound-ruleset Rules []struct { Action string `json:"action" url:"action,key"` // states whether the connection is allowed or denied Source string `json:"source" url:"source,key"` // is the request’s source in CIDR notation } `json:"rules" url:"rules,key"` } // List all inbound rulesets for a space func (s *Service) InboundRulesetList(ctx context.Context, spaceIdentity string, lr *ListRange) (InboundRulesetListResult, error) { var inboundRuleset InboundRulesetListResult return inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-rulesets", spaceIdentity), nil, lr) } type InboundRulesetCreateOpts struct { Rules *[]*struct { Action string `json:"action" url:"action,key"` // states whether the connection is allowed or denied Source string `json:"source" url:"source,key"` // is the request’s source in CIDR notation } `json:"rules,omitempty" url:"rules,omitempty,key"` } // Create a new inbound ruleset func (s *Service) InboundRulesetCreate(ctx context.Context, spaceIdentity string, o InboundRulesetCreateOpts) (*InboundRuleset, error) { var inboundRuleset InboundRuleset return &inboundRuleset, s.Put(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-ruleset", spaceIdentity), o) } // An invitation represents an invite sent to a user to use the Heroku // platform. type Invitation struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` VerificationRequired bool `json:"verification_required" url:"verification_required,key"` // if the invitation requires verification } // Info for invitation. func (s *Service) InvitationInfo(ctx context.Context, invitationIdentity string) (*Invitation, error) { var invitation Invitation return &invitation, s.Get(ctx, &invitation, fmt.Sprintf("/invitations/%v", invitationIdentity), nil, nil) } type InvitationCreateOpts struct { Email string `json:"email" url:"email,key"` // unique email address of account Name *string `json:"name" url:"name,key"` // full name of the account owner } // Invite a user. func (s *Service) InvitationCreate(ctx context.Context, o InvitationCreateOpts) (*Invitation, error) { var invitation Invitation return &invitation, s.Post(ctx, &invitation, fmt.Sprintf("/invitations"), o) } type InvitationSendVerificationCodeOpts struct { Method *string `json:"method,omitempty" url:"method,omitempty,key"` // Transport used to send verification code PhoneNumber string `json:"phone_number" url:"phone_number,key"` // Phone number to send verification code } // Send a verification code for an invitation via SMS/phone call. func (s *Service) InvitationSendVerificationCode(ctx context.Context, invitationIdentity string, o InvitationSendVerificationCodeOpts) (*Invitation, error) { var invitation Invitation return &invitation, s.Post(ctx, &invitation, fmt.Sprintf("/invitations/%v/actions/send-verification", invitationIdentity), o) } type InvitationVerifyOpts struct { VerificationCode string `json:"verification_code" url:"verification_code,key"` // Value used to verify invitation } // Verify an invitation using a verification code. func (s *Service) InvitationVerify(ctx context.Context, invitationIdentity string, o InvitationVerifyOpts) (*Invitation, error) { var invitation Invitation return &invitation, s.Post(ctx, &invitation, fmt.Sprintf("/invitations/%v/actions/verify", invitationIdentity), o) } type InvitationFinalizeOpts struct { Password string `json:"password" url:"password,key"` // current password on the account PasswordConfirmation string `json:"password_confirmation" url:"password_confirmation,key"` // current password on the account ReceiveNewsletter *bool `json:"receive_newsletter,omitempty" url:"receive_newsletter,omitempty,key"` // whether this user should receive a newsletter or not } // Finalize Invitation and Create Account. func (s *Service) InvitationFinalize(ctx context.Context, invitationIdentity string, o InvitationFinalizeOpts) (*Invitation, error) { var invitation Invitation return &invitation, s.Patch(ctx, &invitation, fmt.Sprintf("/invitations/%v", invitationIdentity), o) } // An invoice is an itemized bill of goods for an account which includes // pricing and charges. type Invoice struct { ChargesTotal float64 `json:"charges_total" url:"charges_total,key"` // total charges on this invoice CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created CreditsTotal float64 `json:"credits_total" url:"credits_total,key"` // total credits on this invoice ID string `json:"id" url:"id,key"` // unique identifier of this invoice Number int `json:"number" url:"number,key"` // human readable invoice number PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed) Total float64 `json:"total" url:"total,key"` // combined total of charges and credits on this invoice UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated } type InvoiceInfoResult struct { ChargesTotal float64 `json:"charges_total" url:"charges_total,key"` // total charges on this invoice CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created CreditsTotal float64 `json:"credits_total" url:"credits_total,key"` // total credits on this invoice ID string `json:"id" url:"id,key"` // unique identifier of this invoice Number int `json:"number" url:"number,key"` // human readable invoice number PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed) Total float64 `json:"total" url:"total,key"` // combined total of charges and credits on this invoice UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated } // Info for existing invoice. func (s *Service) InvoiceInfo(ctx context.Context, invoiceIdentity int) (*InvoiceInfoResult, error) { var invoice InvoiceInfoResult return &invoice, s.Get(ctx, &invoice, fmt.Sprintf("/account/invoices/%v", invoiceIdentity), nil, nil) } type InvoiceListResult []struct { ChargesTotal float64 `json:"charges_total" url:"charges_total,key"` // total charges on this invoice CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created CreditsTotal float64 `json:"credits_total" url:"credits_total,key"` // total credits on this invoice ID string `json:"id" url:"id,key"` // unique identifier of this invoice Number int `json:"number" url:"number,key"` // human readable invoice number PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed) Total float64 `json:"total" url:"total,key"` // combined total of charges and credits on this invoice UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated } // List existing invoices. func (s *Service) InvoiceList(ctx context.Context, lr *ListRange) (InvoiceListResult, error) { var invoice InvoiceListResult return invoice, s.Get(ctx, &invoice, fmt.Sprintf("/account/invoices"), nil, lr) } // An invoice address represents the address that should be listed on an // invoice. type InvoiceAddress struct { Address1 string `json:"address_1" url:"address_1,key"` // invoice street address line 1 Address2 string `json:"address_2" url:"address_2,key"` // invoice street address line 2 City string `json:"city" url:"city,key"` // invoice city Country string `json:"country" url:"country,key"` // country HerokuID string `json:"heroku_id" url:"heroku_id,key"` // heroku_id identifier reference Other string `json:"other" url:"other,key"` // metadata / additional information to go on invoice PostalCode string `json:"postal_code" url:"postal_code,key"` // invoice zip code State string `json:"state" url:"state,key"` // invoice state UseInvoiceAddress bool `json:"use_invoice_address" url:"use_invoice_address,key"` // flag to use the invoice address for an account or not } // Retrieve existing invoice address. func (s *Service) InvoiceAddressInfo(ctx context.Context) (*InvoiceAddress, error) { var invoiceAddress InvoiceAddress return &invoiceAddress, s.Get(ctx, &invoiceAddress, fmt.Sprintf("/account/invoice-address"), nil, nil) } type InvoiceAddressUpdateOpts struct { Address1 *string `json:"address_1,omitempty" url:"address_1,omitempty,key"` // invoice street address line 1 Address2 *string `json:"address_2,omitempty" url:"address_2,omitempty,key"` // invoice street address line 2 City *string `json:"city,omitempty" url:"city,omitempty,key"` // invoice city Country *string `json:"country,omitempty" url:"country,omitempty,key"` // country Other *string `json:"other,omitempty" url:"other,omitempty,key"` // metadata / additional information to go on invoice PostalCode *string `json:"postal_code,omitempty" url:"postal_code,omitempty,key"` // invoice zip code State *string `json:"state,omitempty" url:"state,omitempty,key"` // invoice state UseInvoiceAddress *bool `json:"use_invoice_address,omitempty" url:"use_invoice_address,omitempty,key"` // flag to use the invoice address for an account or not } // Update invoice address for an account. func (s *Service) InvoiceAddressUpdate(ctx context.Context, o InvoiceAddressUpdateOpts) (*InvoiceAddress, error) { var invoiceAddress InvoiceAddress return &invoiceAddress, s.Put(ctx, &invoiceAddress, fmt.Sprintf("/account/invoice-address"), o) } // Keys represent public SSH keys associated with an account and are // used to authorize accounts as they are performing git operations. type Key struct { Comment string `json:"comment" url:"comment,key"` // comment on the key CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when key was created Email string `json:"email" url:"email,key"` // deprecated. Please refer to 'comment' instead Fingerprint string `json:"fingerprint" url:"fingerprint,key"` // a unique identifying string based on contents ID string `json:"id" url:"id,key"` // unique identifier of this key PublicKey string `json:"public_key" url:"public_key,key"` // full public_key as uploaded UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when key was updated } type KeyInfoResult struct { Comment string `json:"comment" url:"comment,key"` // comment on the key CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when key was created Email string `json:"email" url:"email,key"` // deprecated. Please refer to 'comment' instead Fingerprint string `json:"fingerprint" url:"fingerprint,key"` // a unique identifying string based on contents ID string `json:"id" url:"id,key"` // unique identifier of this key PublicKey string `json:"public_key" url:"public_key,key"` // full public_key as uploaded UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when key was updated } // Info for existing key. func (s *Service) KeyInfo(ctx context.Context, keyIdentity string) (*KeyInfoResult, error) { var key KeyInfoResult return &key, s.Get(ctx, &key, fmt.Sprintf("/account/keys/%v", keyIdentity), nil, nil) } type KeyListResult []struct { Comment string `json:"comment" url:"comment,key"` // comment on the key CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when key was created Email string `json:"email" url:"email,key"` // deprecated. Please refer to 'comment' instead Fingerprint string `json:"fingerprint" url:"fingerprint,key"` // a unique identifying string based on contents ID string `json:"id" url:"id,key"` // unique identifier of this key PublicKey string `json:"public_key" url:"public_key,key"` // full public_key as uploaded UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when key was updated } // List existing keys. func (s *Service) KeyList(ctx context.Context, lr *ListRange) (KeyListResult, error) { var key KeyListResult return key, s.Get(ctx, &key, fmt.Sprintf("/account/keys"), nil, lr) } // [Log drains](https://devcenter.heroku.com/articles/log-drains) // provide a way to forward your Heroku logs to an external syslog // server for long-term archiving. This external service must be // configured to receive syslog packets from Heroku, whereupon its URL // can be added to an app using this API. Some add-ons will add a log // drain when they are provisioned to an app. These drains can only be // removed by removing the add-on. type LogDrain struct { Addon *struct { ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on } `json:"addon" url:"addon,key"` // add-on that created the drain CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log drain was created ID string `json:"id" url:"id,key"` // unique identifier of this log drain Token string `json:"token" url:"token,key"` // token associated with the log drain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log drain was updated URL string `json:"url" url:"url,key"` // url associated with the log drain } type LogDrainCreateOpts struct { URL string `json:"url" url:"url,key"` // url associated with the log drain } type LogDrainCreateResult struct { Addon *struct { ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on } `json:"addon" url:"addon,key"` // add-on that created the drain CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log drain was created ID string `json:"id" url:"id,key"` // unique identifier of this log drain Token string `json:"token" url:"token,key"` // token associated with the log drain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log drain was updated URL string `json:"url" url:"url,key"` // url associated with the log drain } // Create a new log drain. func (s *Service) LogDrainCreate(ctx context.Context, appIdentity string, o LogDrainCreateOpts) (*LogDrainCreateResult, error) { var logDrain LogDrainCreateResult return &logDrain, s.Post(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains", appIdentity), o) } type LogDrainDeleteResult struct { Addon *struct { ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on } `json:"addon" url:"addon,key"` // add-on that created the drain CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log drain was created ID string `json:"id" url:"id,key"` // unique identifier of this log drain Token string `json:"token" url:"token,key"` // token associated with the log drain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log drain was updated URL string `json:"url" url:"url,key"` // url associated with the log drain } // Delete an existing log drain. Log drains added by add-ons can only be // removed by removing the add-on. func (s *Service) LogDrainDelete(ctx context.Context, appIdentity string, logDrainQueryIdentity string) (*LogDrainDeleteResult, error) { var logDrain LogDrainDeleteResult return &logDrain, s.Delete(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainQueryIdentity)) } type LogDrainInfoResult struct { Addon *struct { ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on } `json:"addon" url:"addon,key"` // add-on that created the drain CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log drain was created ID string `json:"id" url:"id,key"` // unique identifier of this log drain Token string `json:"token" url:"token,key"` // token associated with the log drain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log drain was updated URL string `json:"url" url:"url,key"` // url associated with the log drain } // Info for existing log drain. func (s *Service) LogDrainInfo(ctx context.Context, appIdentity string, logDrainQueryIdentity string) (*LogDrainInfoResult, error) { var logDrain LogDrainInfoResult return &logDrain, s.Get(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainQueryIdentity), nil, nil) } type LogDrainListResult []struct { Addon *struct { ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on } `json:"addon" url:"addon,key"` // add-on that created the drain CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log drain was created ID string `json:"id" url:"id,key"` // unique identifier of this log drain Token string `json:"token" url:"token,key"` // token associated with the log drain UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log drain was updated URL string `json:"url" url:"url,key"` // url associated with the log drain } // List existing log drains. func (s *Service) LogDrainList(ctx context.Context, appIdentity string, lr *ListRange) (LogDrainListResult, error) { var logDrain LogDrainListResult return logDrain, s.Get(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains", appIdentity), nil, lr) } // A log session is a reference to the http based log stream for an app. type LogSession struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log connection was created ID string `json:"id" url:"id,key"` // unique identifier of this log session LogplexURL string `json:"logplex_url" url:"logplex_url,key"` // URL for log streaming session UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log session was updated } type LogSessionCreateOpts struct { Dyno *string `json:"dyno,omitempty" url:"dyno,omitempty,key"` // dyno to limit results to Lines *int `json:"lines,omitempty" url:"lines,omitempty,key"` // number of log lines to stream at once Source *string `json:"source,omitempty" url:"source,omitempty,key"` // log source to limit results to Tail *bool `json:"tail,omitempty" url:"tail,omitempty,key"` // whether to stream ongoing logs } type LogSessionCreateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when log connection was created ID string `json:"id" url:"id,key"` // unique identifier of this log session LogplexURL string `json:"logplex_url" url:"logplex_url,key"` // URL for log streaming session UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when log session was updated } // Create a new log session. func (s *Service) LogSessionCreate(ctx context.Context, appIdentity string, o LogSessionCreateOpts) (*LogSessionCreateResult, error) { var logSession LogSessionCreateResult return &logSession, s.Post(ctx, &logSession, fmt.Sprintf("/apps/%v/log-sessions", appIdentity), o) } // OAuth authorizations represent clients that a Heroku user has // authorized to automate, customize or extend their usage of the // platform. For more information please refer to the [Heroku OAuth // documentation](https://devcenter.heroku.com/articles/oauth) type OAuthAuthorization struct { AccessToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // access token for this authorization Client *struct { ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created Grant *struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant } `json:"grant" url:"grant,key"` // this authorization's grant ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization RefreshToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // authenticated user associated with this authorization } type OAuthAuthorizationCreateOpts struct { Client *string `json:"client,omitempty" url:"client,omitempty,key"` // unique identifier of this OAuth client Description *string `json:"description,omitempty" url:"description,omitempty,key"` // human-friendly description of this OAuth authorization ExpiresIn *int `json:"expires_in,omitempty" url:"expires_in,omitempty,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows } type OAuthAuthorizationCreateResult struct { AccessToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // access token for this authorization Client *struct { ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created Grant *struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant } `json:"grant" url:"grant,key"` // this authorization's grant ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization RefreshToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // authenticated user associated with this authorization } // Create a new OAuth authorization. func (s *Service) OAuthAuthorizationCreate(ctx context.Context, o OAuthAuthorizationCreateOpts) (*OAuthAuthorizationCreateResult, error) { var oauthAuthorization OAuthAuthorizationCreateResult return &oauthAuthorization, s.Post(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations"), o) } type OAuthAuthorizationDeleteResult struct { AccessToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // access token for this authorization Client *struct { ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created Grant *struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant } `json:"grant" url:"grant,key"` // this authorization's grant ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization RefreshToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // authenticated user associated with this authorization } // Delete OAuth authorization. func (s *Service) OAuthAuthorizationDelete(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorizationDeleteResult, error) { var oauthAuthorization OAuthAuthorizationDeleteResult return &oauthAuthorization, s.Delete(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity)) } type OAuthAuthorizationInfoResult struct { AccessToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // access token for this authorization Client *struct { ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created Grant *struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant } `json:"grant" url:"grant,key"` // this authorization's grant ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization RefreshToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // authenticated user associated with this authorization } // Info for an OAuth authorization. func (s *Service) OAuthAuthorizationInfo(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorizationInfoResult, error) { var oauthAuthorization OAuthAuthorizationInfoResult return &oauthAuthorization, s.Get(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity), nil, nil) } type OAuthAuthorizationListResult []struct { AccessToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // access token for this authorization Client *struct { ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created Grant *struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant } `json:"grant" url:"grant,key"` // this authorization's grant ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization RefreshToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // authenticated user associated with this authorization } // List OAuth authorizations. func (s *Service) OAuthAuthorizationList(ctx context.Context, lr *ListRange) (OAuthAuthorizationListResult, error) { var oauthAuthorization OAuthAuthorizationListResult return oauthAuthorization, s.Get(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations"), nil, lr) } type OAuthAuthorizationRegenerateResult struct { AccessToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // access token for this authorization Client *struct { ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } `json:"client" url:"client,key"` // identifier of the client that obtained this authorization, if any CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth authorization was created Grant *struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization ExpiresIn int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth grant expires ID string `json:"id" url:"id,key"` // unique identifier of OAuth grant } `json:"grant" url:"grant,key"` // this authorization's grant ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization RefreshToken *struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Scope []string `json:"scope" url:"scope,key"` // The scope of access OAuth authorization allows UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth authorization was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account FullName *string `json:"full_name" url:"full_name,key"` // full name of the account owner ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // authenticated user associated with this authorization } // Regenerate OAuth tokens. This endpoint is only available to direct // authorizations or privileged OAuth clients. func (s *Service) OAuthAuthorizationRegenerate(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorizationRegenerateResult, error) { var oauthAuthorization OAuthAuthorizationRegenerateResult return &oauthAuthorization, s.Post(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v/actions/regenerate-tokens", oauthAuthorizationIdentity), nil) } // OAuth clients are applications that Heroku users can authorize to // automate, customize or extend their usage of the platform. For more // information please refer to the [Heroku OAuth // documentation](https://devcenter.heroku.com/articles/oauth). type OAuthClient struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated } type OAuthClientCreateOpts struct { Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client } type OAuthClientCreateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated } // Create a new OAuth client. func (s *Service) OAuthClientCreate(ctx context.Context, o OAuthClientCreateOpts) (*OAuthClientCreateResult, error) { var oauthClient OAuthClientCreateResult return &oauthClient, s.Post(ctx, &oauthClient, fmt.Sprintf("/oauth/clients"), o) } type OAuthClientDeleteResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated } // Delete OAuth client. func (s *Service) OAuthClientDelete(ctx context.Context, oauthClientIdentity string) (*OAuthClientDeleteResult, error) { var oauthClient OAuthClientDeleteResult return &oauthClient, s.Delete(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity)) } // Info for an OAuth client func (s *Service) OAuthClientInfo(ctx context.Context, oauthClientIdentity string) (*OAuthClient, error) { var oauthClient OAuthClient return &oauthClient, s.Get(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), nil, nil) } type OAuthClientListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated } // List OAuth clients func (s *Service) OAuthClientList(ctx context.Context, lr *ListRange) (OAuthClientListResult, error) { var oauthClient OAuthClientListResult return oauthClient, s.Get(ctx, &oauthClient, fmt.Sprintf("/oauth/clients"), nil, lr) } type OAuthClientUpdateOpts struct { Name *string `json:"name,omitempty" url:"name,omitempty,key"` // OAuth client name RedirectURI *string `json:"redirect_uri,omitempty" url:"redirect_uri,omitempty,key"` // endpoint for redirection after authorization with OAuth client } type OAuthClientUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated } // Update OAuth client func (s *Service) OAuthClientUpdate(ctx context.Context, oauthClientIdentity string, o OAuthClientUpdateOpts) (*OAuthClientUpdateResult, error) { var oauthClient OAuthClientUpdateResult return &oauthClient, s.Patch(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), o) } type OAuthClientRotateCredentialsResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth client was created ID string `json:"id" url:"id,key"` // unique identifier of this OAuth client IgnoresDelinquent *bool `json:"ignores_delinquent" url:"ignores_delinquent,key"` // whether the client is still operable given a delinquent account Name string `json:"name" url:"name,key"` // OAuth client name RedirectURI string `json:"redirect_uri" url:"redirect_uri,key"` // endpoint for redirection after authorization with OAuth client Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth client was updated } // Rotate credentials for an OAuth client func (s *Service) OAuthClientRotateCredentials(ctx context.Context, oauthClientIdentity string) (*OAuthClientRotateCredentialsResult, error) { var oauthClient OAuthClientRotateCredentialsResult return &oauthClient, s.Post(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v/actions/rotate-credentials", oauthClientIdentity), nil) } // OAuth grants are used to obtain authorizations on behalf of a user. // For more information please refer to the [Heroku OAuth // documentation](https://devcenter.heroku.com/articles/oauth) type OAuthGrant struct{} // OAuth tokens provide access for authorized clients to act on behalf // of a Heroku user to automate, customize or extend their usage of the // platform. For more information please refer to the [Heroku OAuth // documentation](https://devcenter.heroku.com/articles/oauth) type OAuthToken struct { AccessToken struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // current access token Authorization struct { ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization } `json:"authorization" url:"authorization,key"` // authorization for this set of tokens Client *struct { Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client } `json:"client" url:"client,key"` // OAuth client secret used to obtain token CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth token was created Grant struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization Type string `json:"type" url:"type,key"` // type of grant requested, one of `authorization_code` or // `refresh_token` } `json:"grant" url:"grant,key"` // grant used on the underlying authorization ID string `json:"id" url:"id,key"` // unique identifier of OAuth token RefreshToken struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Session struct { ID string `json:"id" url:"id,key"` // unique identifier of OAuth token } `json:"session" url:"session,key"` // OAuth session using this token UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth token was updated User struct { ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // Reference to the user associated with this token } type OAuthTokenCreateOpts struct { Client struct { Secret *string `json:"secret,omitempty" url:"secret,omitempty,key"` // secret used to obtain OAuth authorizations under this client } `json:"client" url:"client,key"` Grant struct { Code *string `json:"code,omitempty" url:"code,omitempty,key"` // grant code received from OAuth web application authorization Type *string `json:"type,omitempty" url:"type,omitempty,key"` // type of grant requested, one of `authorization_code` or // `refresh_token` } `json:"grant" url:"grant,key"` RefreshToken struct { Token *string `json:"token,omitempty" url:"token,omitempty,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` } type OAuthTokenCreateResult struct { AccessToken struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // current access token Authorization struct { ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization } `json:"authorization" url:"authorization,key"` // authorization for this set of tokens Client *struct { Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client } `json:"client" url:"client,key"` // OAuth client secret used to obtain token CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth token was created Grant struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization Type string `json:"type" url:"type,key"` // type of grant requested, one of `authorization_code` or // `refresh_token` } `json:"grant" url:"grant,key"` // grant used on the underlying authorization ID string `json:"id" url:"id,key"` // unique identifier of OAuth token RefreshToken struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Session struct { ID string `json:"id" url:"id,key"` // unique identifier of OAuth token } `json:"session" url:"session,key"` // OAuth session using this token UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth token was updated User struct { ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // Reference to the user associated with this token } // Create a new OAuth token. func (s *Service) OAuthTokenCreate(ctx context.Context, o OAuthTokenCreateOpts) (*OAuthTokenCreateResult, error) { var oauthToken OAuthTokenCreateResult return &oauthToken, s.Post(ctx, &oauthToken, fmt.Sprintf("/oauth/tokens"), o) } type OAuthTokenDeleteResult struct { AccessToken struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"access_token" url:"access_token,key"` // current access token Authorization struct { ID string `json:"id" url:"id,key"` // unique identifier of OAuth authorization } `json:"authorization" url:"authorization,key"` // authorization for this set of tokens Client *struct { Secret string `json:"secret" url:"secret,key"` // secret used to obtain OAuth authorizations under this client } `json:"client" url:"client,key"` // OAuth client secret used to obtain token CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when OAuth token was created Grant struct { Code string `json:"code" url:"code,key"` // grant code received from OAuth web application authorization Type string `json:"type" url:"type,key"` // type of grant requested, one of `authorization_code` or // `refresh_token` } `json:"grant" url:"grant,key"` // grant used on the underlying authorization ID string `json:"id" url:"id,key"` // unique identifier of OAuth token RefreshToken struct { ExpiresIn *int `json:"expires_in" url:"expires_in,key"` // seconds until OAuth token expires; may be `null` for tokens with // indefinite lifetime ID string `json:"id" url:"id,key"` // unique identifier of OAuth token Token string `json:"token" url:"token,key"` // contents of the token to be used for authorization } `json:"refresh_token" url:"refresh_token,key"` // refresh token for this authorization Session struct { ID string `json:"id" url:"id,key"` // unique identifier of OAuth token } `json:"session" url:"session,key"` // OAuth session using this token UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when OAuth token was updated User struct { ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // Reference to the user associated with this token } // Revoke OAuth access token. func (s *Service) OAuthTokenDelete(ctx context.Context, oauthTokenIdentity string) (*OAuthTokenDeleteResult, error) { var oauthToken OAuthTokenDeleteResult return &oauthToken, s.Delete(ctx, &oauthToken, fmt.Sprintf("/oauth/tokens/%v", oauthTokenIdentity)) } // Organizations allow you to manage access to a shared group of // applications across your development team. type Organization struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the organization was created CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the org are paid by credit card. Default bool `json:"default" url:"default,key"` // whether to use this organization when none is specified ID string `json:"id" url:"id,key"` // unique identifier of organization MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in an organization. Name string `json:"name" url:"name,key"` // unique name of organization ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the org is provisioned licenses by salesforce. Role *string `json:"role" url:"role,key"` // role in the organization Type string `json:"type" url:"type,key"` // type of organization. UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the organization was updated } type OrganizationListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the organization was created CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the org are paid by credit card. Default bool `json:"default" url:"default,key"` // whether to use this organization when none is specified ID string `json:"id" url:"id,key"` // unique identifier of organization MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in an organization. Name string `json:"name" url:"name,key"` // unique name of organization ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the org is provisioned licenses by salesforce. Role *string `json:"role" url:"role,key"` // role in the organization Type string `json:"type" url:"type,key"` // type of organization. UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the organization was updated } // List organizations in which you are a member. func (s *Service) OrganizationList(ctx context.Context, lr *ListRange) (OrganizationListResult, error) { var organization OrganizationListResult return organization, s.Get(ctx, &organization, fmt.Sprintf("/organizations"), nil, lr) } // Info for an organization. func (s *Service) OrganizationInfo(ctx context.Context, organizationIdentity string) (*Organization, error) { var organization Organization return &organization, s.Get(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity), nil, nil) } type OrganizationUpdateOpts struct { Default *bool `json:"default,omitempty" url:"default,omitempty,key"` // whether to use this organization when none is specified Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of organization } type OrganizationUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the organization was created CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the org are paid by credit card. Default bool `json:"default" url:"default,key"` // whether to use this organization when none is specified ID string `json:"id" url:"id,key"` // unique identifier of organization MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in an organization. Name string `json:"name" url:"name,key"` // unique name of organization ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the org is provisioned licenses by salesforce. Role *string `json:"role" url:"role,key"` // role in the organization Type string `json:"type" url:"type,key"` // type of organization. UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the organization was updated } // Update organization properties. func (s *Service) OrganizationUpdate(ctx context.Context, organizationIdentity string, o OrganizationUpdateOpts) (*OrganizationUpdateResult, error) { var organization OrganizationUpdateResult return &organization, s.Patch(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity), o) } type OrganizationCreateOpts struct { Address1 *string `json:"address_1,omitempty" url:"address_1,omitempty,key"` // street address line 1 Address2 *string `json:"address_2,omitempty" url:"address_2,omitempty,key"` // street address line 2 CardNumber *string `json:"card_number,omitempty" url:"card_number,omitempty,key"` // encrypted card number of payment method City *string `json:"city,omitempty" url:"city,omitempty,key"` // city Country *string `json:"country,omitempty" url:"country,omitempty,key"` // country Cvv *string `json:"cvv,omitempty" url:"cvv,omitempty,key"` // card verification value ExpirationMonth *string `json:"expiration_month,omitempty" url:"expiration_month,omitempty,key"` // expiration month ExpirationYear *string `json:"expiration_year,omitempty" url:"expiration_year,omitempty,key"` // expiration year FirstName *string `json:"first_name,omitempty" url:"first_name,omitempty,key"` // the first name for payment method LastName *string `json:"last_name,omitempty" url:"last_name,omitempty,key"` // the last name for payment method Name string `json:"name" url:"name,key"` // unique name of organization Other *string `json:"other,omitempty" url:"other,omitempty,key"` // metadata PostalCode *string `json:"postal_code,omitempty" url:"postal_code,omitempty,key"` // postal code State *string `json:"state,omitempty" url:"state,omitempty,key"` // state } type OrganizationCreateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the organization was created CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the org are paid by credit card. Default bool `json:"default" url:"default,key"` // whether to use this organization when none is specified ID string `json:"id" url:"id,key"` // unique identifier of organization MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in an organization. Name string `json:"name" url:"name,key"` // unique name of organization ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the org is provisioned licenses by salesforce. Role *string `json:"role" url:"role,key"` // role in the organization Type string `json:"type" url:"type,key"` // type of organization. UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the organization was updated } // Create a new organization. func (s *Service) OrganizationCreate(ctx context.Context, o OrganizationCreateOpts) (*OrganizationCreateResult, error) { var organization OrganizationCreateResult return &organization, s.Post(ctx, &organization, fmt.Sprintf("/organizations"), o) } type OrganizationDeleteResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the organization was created CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the org are paid by credit card. Default bool `json:"default" url:"default,key"` // whether to use this organization when none is specified ID string `json:"id" url:"id,key"` // unique identifier of organization MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in an organization. Name string `json:"name" url:"name,key"` // unique name of organization ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the org is provisioned licenses by salesforce. Role *string `json:"role" url:"role,key"` // role in the organization Type string `json:"type" url:"type,key"` // type of organization. UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the organization was updated } // Delete an existing organization. func (s *Service) OrganizationDelete(ctx context.Context, organizationIdentity string) (*OrganizationDeleteResult, error) { var organization OrganizationDeleteResult return &organization, s.Delete(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity)) } // A list of add-ons the Organization uses across all apps type OrganizationAddOn struct{} type OrganizationAddOnListForOrganizationResult []struct { Actions []struct{} `json:"actions" url:"actions,key"` // provider actions for this specific add-on AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // billing application associated with this add-on ConfigVars []string `json:"config_vars" url:"config_vars,key"` // config vars exposed to the owning app by this add-on CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when add-on was created ID string `json:"id" url:"id,key"` // unique identifier of add-on Name string `json:"name" url:"name,key"` // globally unique name of the add-on Plan struct { ID string `json:"id" url:"id,key"` // unique identifier of this plan Name string `json:"name" url:"name,key"` // unique name of this plan } `json:"plan" url:"plan,key"` // identity of add-on plan ProviderID string `json:"provider_id" url:"provider_id,key"` // id of this add-on with its provider State string `json:"state" url:"state,key"` // state in the add-on's lifecycle UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when add-on was updated WebURL *string `json:"web_url" url:"web_url,key"` // URL for logging into web interface of add-on (e.g. a dashboard) } // List add-ons used across all Organization apps func (s *Service) OrganizationAddOnListForOrganization(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationAddOnListForOrganizationResult, error) { var organizationAddOn OrganizationAddOnListForOrganizationResult return organizationAddOn, s.Get(ctx, &organizationAddOn, fmt.Sprintf("/organizations/%v/addons", organizationIdentity), nil, lr) } // An organization app encapsulates the organization specific // functionality of Heroku apps. type OrganizationApp struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app. Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this app Owner *struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } type OrganizationAppCreateOpts struct { Locked *bool `json:"locked,omitempty" url:"locked,omitempty,key"` // are other organization members forbidden from joining this app. Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app Organization *string `json:"organization,omitempty" url:"organization,omitempty,key"` // unique name of organization Personal *bool `json:"personal,omitempty" url:"personal,omitempty,key"` // force creation of the app in the user account even if a default org // is set. Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique name of region Space *string `json:"space,omitempty" url:"space,omitempty,key"` // unique name of space Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack } // Create a new app in the specified organization, in the default // organization if unspecified, or in personal account, if default // organization is not set. func (s *Service) OrganizationAppCreate(ctx context.Context, o OrganizationAppCreateOpts) (*OrganizationApp, error) { var organizationApp OrganizationApp return &organizationApp, s.Post(ctx, &organizationApp, fmt.Sprintf("/organizations/apps"), o) } type OrganizationAppListResult []struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app. Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this app Owner *struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // List apps in the default organization, or in personal account, if // default organization is not set. func (s *Service) OrganizationAppList(ctx context.Context, lr *ListRange) (OrganizationAppListResult, error) { var organizationApp OrganizationAppListResult return organizationApp, s.Get(ctx, &organizationApp, fmt.Sprintf("/organizations/apps"), nil, lr) } type OrganizationAppListForOrganizationResult []struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app. Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this app Owner *struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // List organization apps. func (s *Service) OrganizationAppListForOrganization(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationAppListForOrganizationResult, error) { var organizationApp OrganizationAppListForOrganizationResult return organizationApp, s.Get(ctx, &organizationApp, fmt.Sprintf("/organizations/%v/apps", organizationIdentity), nil, lr) } // Info for an organization app. func (s *Service) OrganizationAppInfo(ctx context.Context, organizationAppIdentity string) (*OrganizationApp, error) { var organizationApp OrganizationApp return &organizationApp, s.Get(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), nil, nil) } type OrganizationAppUpdateLockedOpts struct { Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. } type OrganizationAppUpdateLockedResult struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app. Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this app Owner *struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Lock or unlock an organization app. func (s *Service) OrganizationAppUpdateLocked(ctx context.Context, organizationAppIdentity string, o OrganizationAppUpdateLockedOpts) (*OrganizationAppUpdateLockedResult, error) { var organizationApp OrganizationAppUpdateLockedResult return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o) } type OrganizationAppTransferToAccountOpts struct { Owner string `json:"owner" url:"owner,key"` // unique email address of account } // Transfer an existing organization app to another Heroku account. func (s *Service) OrganizationAppTransferToAccount(ctx context.Context, organizationAppIdentity string, o OrganizationAppTransferToAccountOpts) (*OrganizationApp, error) { var organizationApp OrganizationApp return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o) } type OrganizationAppTransferToOrganizationOpts struct { Owner string `json:"owner" url:"owner,key"` // unique name of organization } type OrganizationAppTransferToOrganizationResult struct { ArchivedAt *time.Time `json:"archived_at" url:"archived_at,key"` // when app was archived BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when app was created GitURL string `json:"git_url" url:"git_url,key"` // git repo URL of app ID string `json:"id" url:"id,key"` // unique identifier of app Joined bool `json:"joined" url:"joined,key"` // is the current member a collaborator on this app. Locked bool `json:"locked" url:"locked,key"` // are other organization members forbidden from joining this app. Maintenance bool `json:"maintenance" url:"maintenance,key"` // maintenance status of app Name string `json:"name" url:"name,key"` // unique name of app Organization *struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this app Owner *struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"owner" url:"owner,key"` // identity of app owner Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of app region ReleasedAt *time.Time `json:"released_at" url:"released_at,key"` // when app was released RepoSize *int `json:"repo_size" url:"repo_size,key"` // git repo size in bytes of app SlugSize *int `json:"slug_size" url:"slug_size,key"` // slug size in bytes of app Space *struct { ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space } `json:"space" url:"space,key"` // identity of space Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of app stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when app was updated WebURL string `json:"web_url" url:"web_url,key"` // web URL of app } // Transfer an existing organization app to another organization. func (s *Service) OrganizationAppTransferToOrganization(ctx context.Context, organizationAppIdentity string, o OrganizationAppTransferToOrganizationOpts) (*OrganizationAppTransferToOrganizationResult, error) { var organizationApp OrganizationAppTransferToOrganizationResult return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o) } // An organization collaborator represents an account that has been // given access to an organization app on Heroku. type OrganizationAppCollaborator struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } type OrganizationAppCollaboratorCreateOpts struct { Silent *bool `json:"silent,omitempty" url:"silent,omitempty,key"` // whether to suppress email invitation when creating collaborator User string `json:"user" url:"user,key"` // unique email address of account } type OrganizationAppCollaboratorCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Create a new collaborator on an organization app. Use this endpoint // instead of the `/apps/{app_id_or_name}/collaborator` endpoint when // you want the collaborator to be granted [permissions] // (https://devcenter.heroku.com/articles/org-users-access#roles-and-app- // permissions) according to their role in the organization. func (s *Service) OrganizationAppCollaboratorCreate(ctx context.Context, appIdentity string, o OrganizationAppCollaboratorCreateOpts) (*OrganizationAppCollaboratorCreateResult, error) { var organizationAppCollaborator OrganizationAppCollaboratorCreateResult return &organizationAppCollaborator, s.Post(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators", appIdentity), o) } type OrganizationAppCollaboratorDeleteResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Delete an existing collaborator from an organization app. func (s *Service) OrganizationAppCollaboratorDelete(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaboratorDeleteResult, error) { var organizationAppCollaborator OrganizationAppCollaboratorDeleteResult return &organizationAppCollaborator, s.Delete(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity)) } type OrganizationAppCollaboratorInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Info for a collaborator on an organization app. func (s *Service) OrganizationAppCollaboratorInfo(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaboratorInfoResult, error) { var organizationAppCollaborator OrganizationAppCollaboratorInfoResult return &organizationAppCollaborator, s.Get(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), nil, nil) } type OrganizationAppCollaboratorUpdateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // Update an existing collaborator from an organization app. func (s *Service) OrganizationAppCollaboratorUpdate(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaboratorUpdateResult, error) { var organizationAppCollaborator OrganizationAppCollaboratorUpdateResult return &organizationAppCollaborator, s.Patch(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), nil) } type OrganizationAppCollaboratorListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app collaborator belongs to CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when collaborator was created ID string `json:"id" url:"id,key"` // unique identifier of collaborator Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when collaborator was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of collaborated account } // List collaborators on an organization app. func (s *Service) OrganizationAppCollaboratorList(ctx context.Context, organizationAppIdentity string, lr *ListRange) (OrganizationAppCollaboratorListResult, error) { var organizationAppCollaborator OrganizationAppCollaboratorListResult return organizationAppCollaborator, s.Get(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators", organizationAppIdentity), nil, lr) } // An organization app permission is a behavior that is assigned to a // user in an organization app. type OrganizationAppPermission struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } type OrganizationAppPermissionListResult []struct { Description string `json:"description" url:"description,key"` // A description of what the app permission allows. Name string `json:"name" url:"name,key"` // The name of the app permission. } // Lists permissions available to organizations. func (s *Service) OrganizationAppPermissionList(ctx context.Context, lr *ListRange) (OrganizationAppPermissionListResult, error) { var organizationAppPermission OrganizationAppPermissionListResult return organizationAppPermission, s.Get(ctx, &organizationAppPermission, fmt.Sprintf("/organizations/permissions"), nil, lr) } // An organization feature represents a feature enabled on an // organization account. type OrganizationFeature struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } type OrganizationFeatureInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } // Info for an existing account feature. func (s *Service) OrganizationFeatureInfo(ctx context.Context, organizationIdentity string, organizationFeatureIdentity string) (*OrganizationFeatureInfoResult, error) { var organizationFeature OrganizationFeatureInfoResult return &organizationFeature, s.Get(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features/%v", organizationIdentity, organizationFeatureIdentity), nil, nil) } type OrganizationFeatureListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when account feature was created Description string `json:"description" url:"description,key"` // description of account feature DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of account feature Enabled bool `json:"enabled" url:"enabled,key"` // whether or not account feature has been enabled ID string `json:"id" url:"id,key"` // unique identifier of account feature Name string `json:"name" url:"name,key"` // unique name of account feature State string `json:"state" url:"state,key"` // state of account feature UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when account feature was updated } // List existing organization features. func (s *Service) OrganizationFeatureList(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationFeatureListResult, error) { var organizationFeature OrganizationFeatureListResult return organizationFeature, s.Get(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features", organizationIdentity), nil, lr) } // An organization invitation represents an invite to an organization. type OrganizationInvitation struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created ID string `json:"id" url:"id,key"` // Unique identifier of an invitation InvitedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"invited_by" url:"invited_by,key"` Organization struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invitation was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` } type OrganizationInvitationListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created ID string `json:"id" url:"id,key"` // Unique identifier of an invitation InvitedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"invited_by" url:"invited_by,key"` Organization struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invitation was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` } // Get a list of an organization's Identity Providers func (s *Service) OrganizationInvitationList(ctx context.Context, organizationName string, lr *ListRange) (OrganizationInvitationListResult, error) { var organizationInvitation OrganizationInvitationListResult return organizationInvitation, s.Get(ctx, &organizationInvitation, fmt.Sprintf("/organizations/%v/invitations", organizationName), nil, lr) } type OrganizationInvitationCreateOpts struct { Email string `json:"email" url:"email,key"` // unique email address of account Role *string `json:"role" url:"role,key"` // role in the organization } // Create Organization Invitation func (s *Service) OrganizationInvitationCreate(ctx context.Context, organizationIdentity string, o OrganizationInvitationCreateOpts) (*OrganizationInvitation, error) { var organizationInvitation OrganizationInvitation return &organizationInvitation, s.Put(ctx, &organizationInvitation, fmt.Sprintf("/organizations/%v/invitations", organizationIdentity), o) } // Revoke an organization invitation. func (s *Service) OrganizationInvitationRevoke(ctx context.Context, organizationIdentity string, organizationInvitationIdentity string) (*OrganizationInvitation, error) { var organizationInvitation OrganizationInvitation return &organizationInvitation, s.Delete(ctx, &organizationInvitation, fmt.Sprintf("/organizations/%v/invitations/%v", organizationIdentity, organizationInvitationIdentity)) } type OrganizationInvitationGetResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invitation was created ID string `json:"id" url:"id,key"` // Unique identifier of an invitation InvitedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"invited_by" url:"invited_by,key"` Organization struct { ID string `json:"id" url:"id,key"` // unique identifier of organization Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` Role *string `json:"role" url:"role,key"` // role in the organization UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invitation was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` } // Get an invitation by its token func (s *Service) OrganizationInvitationGet(ctx context.Context, organizationInvitationToken string, lr *ListRange) (*OrganizationInvitationGetResult, error) { var organizationInvitation OrganizationInvitationGetResult return &organizationInvitation, s.Get(ctx, &organizationInvitation, fmt.Sprintf("/organizations/invitations/%v", organizationInvitationToken), nil, lr) } type OrganizationInvitationAcceptResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } // Accept Organization Invitation func (s *Service) OrganizationInvitationAccept(ctx context.Context, organizationInvitationToken string) (*OrganizationInvitationAcceptResult, error) { var organizationInvitation OrganizationInvitationAcceptResult return &organizationInvitation, s.Post(ctx, &organizationInvitation, fmt.Sprintf("/organizations/invitations/%v/accept", organizationInvitationToken), nil) } // An organization invoice is an itemized bill of goods for an // organization which includes pricing and charges. type OrganizationInvoice struct { AddonsTotal int `json:"addons_total" url:"addons_total,key"` // total add-ons charges in on this invoice ChargesTotal int `json:"charges_total" url:"charges_total,key"` // total charges on this invoice CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created CreditsTotal int `json:"credits_total" url:"credits_total,key"` // total credits on this invoice DatabaseTotal int `json:"database_total" url:"database_total,key"` // total database charges on this invoice DynoUnits float64 `json:"dyno_units" url:"dyno_units,key"` // The total amount of dyno units consumed across dyno types. ID string `json:"id" url:"id,key"` // unique identifier of this invoice Number int `json:"number" url:"number,key"` // human readable invoice number PaymentStatus string `json:"payment_status" url:"payment_status,key"` // Status of the invoice payment. PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers PlatformTotal int `json:"platform_total" url:"platform_total,key"` // total platform charges on this invoice State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed) Total int `json:"total" url:"total,key"` // combined total of charges and credits on this invoice UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated WeightedDynoHours float64 `json:"weighted_dyno_hours" url:"weighted_dyno_hours,key"` // The total amount of hours consumed across dyno types. } type OrganizationInvoiceInfoResult struct { AddonsTotal int `json:"addons_total" url:"addons_total,key"` // total add-ons charges in on this invoice ChargesTotal int `json:"charges_total" url:"charges_total,key"` // total charges on this invoice CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created CreditsTotal int `json:"credits_total" url:"credits_total,key"` // total credits on this invoice DatabaseTotal int `json:"database_total" url:"database_total,key"` // total database charges on this invoice DynoUnits float64 `json:"dyno_units" url:"dyno_units,key"` // The total amount of dyno units consumed across dyno types. ID string `json:"id" url:"id,key"` // unique identifier of this invoice Number int `json:"number" url:"number,key"` // human readable invoice number PaymentStatus string `json:"payment_status" url:"payment_status,key"` // Status of the invoice payment. PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers PlatformTotal int `json:"platform_total" url:"platform_total,key"` // total platform charges on this invoice State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed) Total int `json:"total" url:"total,key"` // combined total of charges and credits on this invoice UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated WeightedDynoHours float64 `json:"weighted_dyno_hours" url:"weighted_dyno_hours,key"` // The total amount of hours consumed across dyno types. } // Info for existing invoice. func (s *Service) OrganizationInvoiceInfo(ctx context.Context, organizationIdentity string, organizationInvoiceIdentity int) (*OrganizationInvoiceInfoResult, error) { var organizationInvoice OrganizationInvoiceInfoResult return &organizationInvoice, s.Get(ctx, &organizationInvoice, fmt.Sprintf("/organizations/%v/invoices/%v", organizationIdentity, organizationInvoiceIdentity), nil, nil) } type OrganizationInvoiceListResult []struct { AddonsTotal int `json:"addons_total" url:"addons_total,key"` // total add-ons charges in on this invoice ChargesTotal int `json:"charges_total" url:"charges_total,key"` // total charges on this invoice CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when invoice was created CreditsTotal int `json:"credits_total" url:"credits_total,key"` // total credits on this invoice DatabaseTotal int `json:"database_total" url:"database_total,key"` // total database charges on this invoice DynoUnits float64 `json:"dyno_units" url:"dyno_units,key"` // The total amount of dyno units consumed across dyno types. ID string `json:"id" url:"id,key"` // unique identifier of this invoice Number int `json:"number" url:"number,key"` // human readable invoice number PaymentStatus string `json:"payment_status" url:"payment_status,key"` // Status of the invoice payment. PeriodEnd string `json:"period_end" url:"period_end,key"` // the ending date that the invoice covers PeriodStart string `json:"period_start" url:"period_start,key"` // the starting date that this invoice covers PlatformTotal int `json:"platform_total" url:"platform_total,key"` // total platform charges on this invoice State int `json:"state" url:"state,key"` // payment status for this invoice (pending, successful, failed) Total int `json:"total" url:"total,key"` // combined total of charges and credits on this invoice UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when invoice was updated WeightedDynoHours float64 `json:"weighted_dyno_hours" url:"weighted_dyno_hours,key"` // The total amount of hours consumed across dyno types. } // List existing invoices. func (s *Service) OrganizationInvoiceList(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationInvoiceListResult, error) { var organizationInvoice OrganizationInvoiceListResult return organizationInvoice, s.Get(ctx, &organizationInvoice, fmt.Sprintf("/organizations/%v/invoices", organizationIdentity), nil, lr) } // An organization member is an individual with access to an // organization. type OrganizationMember struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } type OrganizationMemberCreateOrUpdateOpts struct { Email string `json:"email" url:"email,key"` // email address of the organization member Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider Role *string `json:"role" url:"role,key"` // role in the organization } type OrganizationMemberCreateOrUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } // Create a new organization member, or update their role. func (s *Service) OrganizationMemberCreateOrUpdate(ctx context.Context, organizationIdentity string, o OrganizationMemberCreateOrUpdateOpts) (*OrganizationMemberCreateOrUpdateResult, error) { var organizationMember OrganizationMemberCreateOrUpdateResult return &organizationMember, s.Put(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o) } type OrganizationMemberCreateOpts struct { Email string `json:"email" url:"email,key"` // email address of the organization member Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider Role *string `json:"role" url:"role,key"` // role in the organization } type OrganizationMemberCreateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } // Create a new organization member. func (s *Service) OrganizationMemberCreate(ctx context.Context, organizationIdentity string, o OrganizationMemberCreateOpts) (*OrganizationMemberCreateResult, error) { var organizationMember OrganizationMemberCreateResult return &organizationMember, s.Post(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o) } type OrganizationMemberUpdateOpts struct { Email string `json:"email" url:"email,key"` // email address of the organization member Federated *bool `json:"federated,omitempty" url:"federated,omitempty,key"` // whether the user is federated and belongs to an Identity Provider Role *string `json:"role" url:"role,key"` // role in the organization } type OrganizationMemberUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } // Update an organization member. func (s *Service) OrganizationMemberUpdate(ctx context.Context, organizationIdentity string, o OrganizationMemberUpdateOpts) (*OrganizationMemberUpdateResult, error) { var organizationMember OrganizationMemberUpdateResult return &organizationMember, s.Patch(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o) } type OrganizationMemberDeleteResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } // Remove a member from the organization. func (s *Service) OrganizationMemberDelete(ctx context.Context, organizationIdentity string, organizationMemberIdentity string) (*OrganizationMemberDeleteResult, error) { var organizationMember OrganizationMemberDeleteResult return &organizationMember, s.Delete(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members/%v", organizationIdentity, organizationMemberIdentity)) } type OrganizationMemberListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the membership record was created Email string `json:"email" url:"email,key"` // email address of the organization member Federated bool `json:"federated" url:"federated,key"` // whether the user is federated and belongs to an Identity Provider ID string `json:"id" url:"id,key"` // unique identifier of organization member Role *string `json:"role" url:"role,key"` // role in the organization TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise organization member has two factor // authentication enabled UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the membership record was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account Name *string `json:"name" url:"name,key"` // full name of the account owner } `json:"user" url:"user,key"` // user information for the membership } // List members of the organization. func (s *Service) OrganizationMemberList(ctx context.Context, organizationIdentity string, lr *ListRange) (OrganizationMemberListResult, error) { var organizationMember OrganizationMemberListResult return organizationMember, s.Get(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), nil, lr) } // Tracks an organization's preferences type OrganizationPreferences struct { DefaultPermission *string `json:"default-permission" url:"default-permission,key"` // The default permission used when adding new members to the // organization WhitelistingEnabled *bool `json:"whitelisting-enabled" url:"whitelisting-enabled,key"` // Whether whitelisting rules should be applied to add-on installations } type OrganizationPreferencesListResult struct { DefaultPermission *string `json:"default-permission" url:"default-permission,key"` // The default permission used when adding new members to the // organization WhitelistingEnabled *bool `json:"whitelisting-enabled" url:"whitelisting-enabled,key"` // Whether whitelisting rules should be applied to add-on installations } // Retrieve Organization Preferences func (s *Service) OrganizationPreferencesList(ctx context.Context, organizationPreferencesIdentity string) (*OrganizationPreferencesListResult, error) { var organizationPreferences OrganizationPreferencesListResult return &organizationPreferences, s.Get(ctx, &organizationPreferences, fmt.Sprintf("/organizations/%v/preferences", organizationPreferencesIdentity), nil, nil) } type OrganizationPreferencesUpdateOpts struct { WhitelistingEnabled *bool `json:"whitelisting-enabled,omitempty" url:"whitelisting-enabled,omitempty,key"` // Whether whitelisting rules should be applied to add-on installations } type OrganizationPreferencesUpdateResult struct { DefaultPermission *string `json:"default-permission" url:"default-permission,key"` // The default permission used when adding new members to the // organization WhitelistingEnabled *bool `json:"whitelisting-enabled" url:"whitelisting-enabled,key"` // Whether whitelisting rules should be applied to add-on installations } // Update Organization Preferences func (s *Service) OrganizationPreferencesUpdate(ctx context.Context, organizationPreferencesIdentity string, o OrganizationPreferencesUpdateOpts) (*OrganizationPreferencesUpdateResult, error) { var organizationPreferences OrganizationPreferencesUpdateResult return &organizationPreferences, s.Patch(ctx, &organizationPreferences, fmt.Sprintf("/organizations/%v/preferences", organizationPreferencesIdentity), o) } // An outbound-ruleset is a collection of rules that specify what hosts // Dynos are allowed to communicate with. type OutboundRuleset struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when outbound-ruleset was created CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an outbound-ruleset Rules []struct { FromPort int `json:"from_port" url:"from_port,key"` // an endpoint of communication in an operating system. Protocol string `json:"protocol" url:"protocol,key"` // formal standards and policies comprised of rules, procedures and // formats that define communication between two or more devices over a // network Target string `json:"target" url:"target,key"` // is the target destination in CIDR notation ToPort int `json:"to_port" url:"to_port,key"` // an endpoint of communication in an operating system. } `json:"rules" url:"rules,key"` } type OutboundRulesetInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when outbound-ruleset was created CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an outbound-ruleset Rules []struct { FromPort int `json:"from_port" url:"from_port,key"` // an endpoint of communication in an operating system. Protocol string `json:"protocol" url:"protocol,key"` // formal standards and policies comprised of rules, procedures and // formats that define communication between two or more devices over a // network Target string `json:"target" url:"target,key"` // is the target destination in CIDR notation ToPort int `json:"to_port" url:"to_port,key"` // an endpoint of communication in an operating system. } `json:"rules" url:"rules,key"` } // Current outbound ruleset for a space func (s *Service) OutboundRulesetInfo(ctx context.Context, spaceIdentity string) (*OutboundRulesetInfoResult, error) { var outboundRuleset OutboundRulesetInfoResult return &outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-ruleset", spaceIdentity), nil, nil) } type OutboundRulesetListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when outbound-ruleset was created CreatedBy string `json:"created_by" url:"created_by,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an outbound-ruleset Rules []struct { FromPort int `json:"from_port" url:"from_port,key"` // an endpoint of communication in an operating system. Protocol string `json:"protocol" url:"protocol,key"` // formal standards and policies comprised of rules, procedures and // formats that define communication between two or more devices over a // network Target string `json:"target" url:"target,key"` // is the target destination in CIDR notation ToPort int `json:"to_port" url:"to_port,key"` // an endpoint of communication in an operating system. } `json:"rules" url:"rules,key"` } // List all Outbound Rulesets for a space func (s *Service) OutboundRulesetList(ctx context.Context, spaceIdentity string, lr *ListRange) (OutboundRulesetListResult, error) { var outboundRuleset OutboundRulesetListResult return outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-rulesets", spaceIdentity), nil, lr) } type OutboundRulesetCreateOpts struct { Rules *[]*struct { FromPort int `json:"from_port" url:"from_port,key"` // an endpoint of communication in an operating system. Protocol string `json:"protocol" url:"protocol,key"` // formal standards and policies comprised of rules, procedures and // formats that define communication between two or more devices over a // network Target string `json:"target" url:"target,key"` // is the target destination in CIDR notation ToPort int `json:"to_port" url:"to_port,key"` // an endpoint of communication in an operating system. } `json:"rules,omitempty" url:"rules,omitempty,key"` } // Create a new outbound ruleset func (s *Service) OutboundRulesetCreate(ctx context.Context, spaceIdentity string, o OutboundRulesetCreateOpts) (*OutboundRuleset, error) { var outboundRuleset OutboundRuleset return &outboundRuleset, s.Put(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-ruleset", spaceIdentity), o) } // A password reset represents a in-process password reset attempt. type PasswordReset struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when password reset was created User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` } type PasswordResetResetPasswordOpts struct { Email *string `json:"email,omitempty" url:"email,omitempty,key"` // unique email address of account } // Reset account's password. This will send a reset password link to the // user's email address. func (s *Service) PasswordResetResetPassword(ctx context.Context, o PasswordResetResetPasswordOpts) (*PasswordReset, error) { var passwordReset PasswordReset return &passwordReset, s.Post(ctx, &passwordReset, fmt.Sprintf("/password-resets"), o) } type PasswordResetCompleteResetPasswordOpts struct { Password *string `json:"password,omitempty" url:"password,omitempty,key"` // current password on the account PasswordConfirmation *string `json:"password_confirmation,omitempty" url:"password_confirmation,omitempty,key"` // confirmation of the new password } // Complete password reset. func (s *Service) PasswordResetCompleteResetPassword(ctx context.Context, passwordResetResetPasswordToken string, o PasswordResetCompleteResetPasswordOpts) (*PasswordReset, error) { var passwordReset PasswordReset return &passwordReset, s.Post(ctx, &passwordReset, fmt.Sprintf("/password-resets/%v/actions/finalize", passwordResetResetPasswordToken), o) } // A pipeline allows grouping of apps into different stages. type Pipeline struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline Name string `json:"name" url:"name,key"` // name of pipeline UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated } type PipelineCreateOpts struct { Name string `json:"name" url:"name,key"` // name of pipeline } type PipelineCreateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline Name string `json:"name" url:"name,key"` // name of pipeline UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated } // Create a new pipeline. func (s *Service) PipelineCreate(ctx context.Context, o PipelineCreateOpts) (*PipelineCreateResult, error) { var pipeline PipelineCreateResult return &pipeline, s.Post(ctx, &pipeline, fmt.Sprintf("/pipelines"), o) } type PipelineInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline Name string `json:"name" url:"name,key"` // name of pipeline UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated } // Info for existing pipeline. func (s *Service) PipelineInfo(ctx context.Context, pipelineIdentity string) (*PipelineInfoResult, error) { var pipeline PipelineInfoResult return &pipeline, s.Get(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineIdentity), nil, nil) } type PipelineDeleteResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline Name string `json:"name" url:"name,key"` // name of pipeline UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated } // Delete an existing pipeline. func (s *Service) PipelineDelete(ctx context.Context, pipelineID string) (*PipelineDeleteResult, error) { var pipeline PipelineDeleteResult return &pipeline, s.Delete(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineID)) } type PipelineUpdateOpts struct { Name *string `json:"name,omitempty" url:"name,omitempty,key"` // name of pipeline } type PipelineUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline Name string `json:"name" url:"name,key"` // name of pipeline UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated } // Update an existing pipeline. func (s *Service) PipelineUpdate(ctx context.Context, pipelineID string, o PipelineUpdateOpts) (*PipelineUpdateResult, error) { var pipeline PipelineUpdateResult return &pipeline, s.Patch(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineID), o) } type PipelineListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline Name string `json:"name" url:"name,key"` // name of pipeline UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline was updated } // List existing pipelines. func (s *Service) PipelineList(ctx context.Context, lr *ListRange) (PipelineListResult, error) { var pipeline PipelineListResult return pipeline, s.Get(ctx, &pipeline, fmt.Sprintf("/pipelines"), nil, lr) } // Information about an app's coupling to a pipeline type PipelineCoupling struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app involved in the pipeline coupling CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling Stage string `json:"stage" url:"stage,key"` // target pipeline stage UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated } type PipelineCouplingListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app involved in the pipeline coupling CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling Stage string `json:"stage" url:"stage,key"` // target pipeline stage UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated } // List couplings for a pipeline func (s *Service) PipelineCouplingList(ctx context.Context, pipelineID string, lr *ListRange) (PipelineCouplingListResult, error) { var pipelineCoupling PipelineCouplingListResult return pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipelines/%v/pipeline-couplings", pipelineID), nil, lr) } type PipelineCouplingCreateOpts struct { App string `json:"app" url:"app,key"` // unique identifier of app Pipeline string `json:"pipeline" url:"pipeline,key"` // unique identifier of pipeline Stage string `json:"stage" url:"stage,key"` // target pipeline stage } type PipelineCouplingCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app involved in the pipeline coupling CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling Stage string `json:"stage" url:"stage,key"` // target pipeline stage UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated } // Create a new pipeline coupling. func (s *Service) PipelineCouplingCreate(ctx context.Context, o PipelineCouplingCreateOpts) (*PipelineCouplingCreateResult, error) { var pipelineCoupling PipelineCouplingCreateResult return &pipelineCoupling, s.Post(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings"), o) } type PipelineCouplingInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app involved in the pipeline coupling CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling Stage string `json:"stage" url:"stage,key"` // target pipeline stage UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated } // Info for an existing pipeline coupling. func (s *Service) PipelineCouplingInfo(ctx context.Context, pipelineCouplingIdentity string) (*PipelineCouplingInfoResult, error) { var pipelineCoupling PipelineCouplingInfoResult return &pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity), nil, nil) } type PipelineCouplingDeleteResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app involved in the pipeline coupling CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling Stage string `json:"stage" url:"stage,key"` // target pipeline stage UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated } // Delete an existing pipeline coupling. func (s *Service) PipelineCouplingDelete(ctx context.Context, pipelineCouplingIdentity string) (*PipelineCouplingDeleteResult, error) { var pipelineCoupling PipelineCouplingDeleteResult return &pipelineCoupling, s.Delete(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity)) } type PipelineCouplingUpdateOpts struct { Stage *string `json:"stage,omitempty" url:"stage,omitempty,key"` // target pipeline stage } type PipelineCouplingUpdateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // app involved in the pipeline coupling CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when pipeline coupling was created ID string `json:"id" url:"id,key"` // unique identifier of pipeline coupling Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the coupling Stage string `json:"stage" url:"stage,key"` // target pipeline stage UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when pipeline coupling was updated } // Update an existing pipeline coupling. func (s *Service) PipelineCouplingUpdate(ctx context.Context, pipelineCouplingIdentity string, o PipelineCouplingUpdateOpts) (*PipelineCouplingUpdateResult, error) { var pipelineCoupling PipelineCouplingUpdateResult return &pipelineCoupling, s.Patch(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity), o) } // Promotions allow you to move code from an app in a pipeline to all // targets type PipelinePromotion struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when promotion was created ID string `json:"id" url:"id,key"` // unique identifier of promotion Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // the pipeline which the promotion belongs to Source struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // the app which was promoted from Release struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // the release used to promoted from } `json:"source" url:"source,key"` // the app being promoted from Status string `json:"status" url:"status,key"` // status of promotion UpdatedAt *time.Time `json:"updated_at" url:"updated_at,key"` // when promotion was updated } type PipelinePromotionCreateOpts struct { Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // pipeline involved in the promotion Source struct { App *struct { ID *string `json:"id,omitempty" url:"id,omitempty,key"` // unique identifier of app } `json:"app,omitempty" url:"app,omitempty,key"` // the app which was promoted from } `json:"source" url:"source,key"` // the app being promoted from Targets []struct { App *struct { ID *string `json:"id,omitempty" url:"id,omitempty,key"` // unique identifier of app } `json:"app,omitempty" url:"app,omitempty,key"` // the app is being promoted to } `json:"targets" url:"targets,key"` } // Create a new promotion. func (s *Service) PipelinePromotionCreate(ctx context.Context, o PipelinePromotionCreateOpts) (*PipelinePromotion, error) { var pipelinePromotion PipelinePromotion return &pipelinePromotion, s.Post(ctx, &pipelinePromotion, fmt.Sprintf("/pipeline-promotions"), o) } type PipelinePromotionInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when promotion was created ID string `json:"id" url:"id,key"` // unique identifier of promotion Pipeline struct { ID string `json:"id" url:"id,key"` // unique identifier of pipeline } `json:"pipeline" url:"pipeline,key"` // the pipeline which the promotion belongs to Source struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // the app which was promoted from Release struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // the release used to promoted from } `json:"source" url:"source,key"` // the app being promoted from Status string `json:"status" url:"status,key"` // status of promotion UpdatedAt *time.Time `json:"updated_at" url:"updated_at,key"` // when promotion was updated } // Info for existing pipeline promotion. func (s *Service) PipelinePromotionInfo(ctx context.Context, pipelinePromotionIdentity string) (*PipelinePromotionInfoResult, error) { var pipelinePromotion PipelinePromotionInfoResult return &pipelinePromotion, s.Get(ctx, &pipelinePromotion, fmt.Sprintf("/pipeline-promotions/%v", pipelinePromotionIdentity), nil, nil) } // Promotion targets represent an individual app being promoted to type PipelinePromotionTarget struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // the app which was promoted to ErrorMessage *string `json:"error_message" url:"error_message,key"` // an error message for why the promotion failed ID string `json:"id" url:"id,key"` // unique identifier of promotion target PipelinePromotion struct { ID string `json:"id" url:"id,key"` // unique identifier of promotion } `json:"pipeline_promotion" url:"pipeline_promotion,key"` // the promotion which the target belongs to Release *struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // the release which was created on the target app Status string `json:"status" url:"status,key"` // status of promotion } type PipelinePromotionTargetListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app } `json:"app" url:"app,key"` // the app which was promoted to ErrorMessage *string `json:"error_message" url:"error_message,key"` // an error message for why the promotion failed ID string `json:"id" url:"id,key"` // unique identifier of promotion target PipelinePromotion struct { ID string `json:"id" url:"id,key"` // unique identifier of promotion } `json:"pipeline_promotion" url:"pipeline_promotion,key"` // the promotion which the target belongs to Release *struct { ID string `json:"id" url:"id,key"` // unique identifier of release } `json:"release" url:"release,key"` // the release which was created on the target app Status string `json:"status" url:"status,key"` // status of promotion } // List promotion targets belonging to an existing promotion. func (s *Service) PipelinePromotionTargetList(ctx context.Context, pipelinePromotionID string, lr *ListRange) (PipelinePromotionTargetListResult, error) { var pipelinePromotionTarget PipelinePromotionTargetListResult return pipelinePromotionTarget, s.Get(ctx, &pipelinePromotionTarget, fmt.Sprintf("/pipeline-promotions/%v/promotion-targets", pipelinePromotionID), nil, lr) } // Plans represent different configurations of add-ons that may be added // to apps. Endpoints under add-on services can be accessed without // authentication. type Plan struct { AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service Compliance *[]string `json:"compliance" url:"compliance,key"` // the compliance regimes applied to an add-on plan CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when plan was created Default bool `json:"default" url:"default,key"` // whether this plan is the default for its add-on service Description string `json:"description" url:"description,key"` // description of plan HumanName string `json:"human_name" url:"human_name,key"` // human readable name of the add-on plan ID string `json:"id" url:"id,key"` // unique identifier of this plan InstallableInsidePrivateNetwork bool `json:"installable_inside_private_network" url:"installable_inside_private_network,key"` // whether this plan is installable to a Private Spaces app InstallableOutsidePrivateNetwork bool `json:"installable_outside_private_network" url:"installable_outside_private_network,key"` // whether this plan is installable to a Common Runtime app Name string `json:"name" url:"name,key"` // unique name of this plan Price struct { Cents int `json:"cents" url:"cents,key"` // price in cents per unit of plan Unit string `json:"unit" url:"unit,key"` // unit of price for plan } `json:"price" url:"price,key"` // price SpaceDefault bool `json:"space_default" url:"space_default,key"` // whether this plan is the default for apps in Private Spaces State string `json:"state" url:"state,key"` // release status for plan UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when plan was updated Visible bool `json:"visible" url:"visible,key"` // whether this plan is publicly visible } type PlanInfoResult struct { AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service Compliance *[]string `json:"compliance" url:"compliance,key"` // the compliance regimes applied to an add-on plan CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when plan was created Default bool `json:"default" url:"default,key"` // whether this plan is the default for its add-on service Description string `json:"description" url:"description,key"` // description of plan HumanName string `json:"human_name" url:"human_name,key"` // human readable name of the add-on plan ID string `json:"id" url:"id,key"` // unique identifier of this plan InstallableInsidePrivateNetwork bool `json:"installable_inside_private_network" url:"installable_inside_private_network,key"` // whether this plan is installable to a Private Spaces app InstallableOutsidePrivateNetwork bool `json:"installable_outside_private_network" url:"installable_outside_private_network,key"` // whether this plan is installable to a Common Runtime app Name string `json:"name" url:"name,key"` // unique name of this plan Price struct { Cents int `json:"cents" url:"cents,key"` // price in cents per unit of plan Unit string `json:"unit" url:"unit,key"` // unit of price for plan } `json:"price" url:"price,key"` // price SpaceDefault bool `json:"space_default" url:"space_default,key"` // whether this plan is the default for apps in Private Spaces State string `json:"state" url:"state,key"` // release status for plan UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when plan was updated Visible bool `json:"visible" url:"visible,key"` // whether this plan is publicly visible } // Info for existing plan. func (s *Service) PlanInfo(ctx context.Context, addOnServiceIdentity string, planIdentity string) (*PlanInfoResult, error) { var plan PlanInfoResult return &plan, s.Get(ctx, &plan, fmt.Sprintf("/addon-services/%v/plans/%v", addOnServiceIdentity, planIdentity), nil, nil) } type PlanListResult []struct { AddonService struct { ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // identity of add-on service Compliance *[]string `json:"compliance" url:"compliance,key"` // the compliance regimes applied to an add-on plan CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when plan was created Default bool `json:"default" url:"default,key"` // whether this plan is the default for its add-on service Description string `json:"description" url:"description,key"` // description of plan HumanName string `json:"human_name" url:"human_name,key"` // human readable name of the add-on plan ID string `json:"id" url:"id,key"` // unique identifier of this plan InstallableInsidePrivateNetwork bool `json:"installable_inside_private_network" url:"installable_inside_private_network,key"` // whether this plan is installable to a Private Spaces app InstallableOutsidePrivateNetwork bool `json:"installable_outside_private_network" url:"installable_outside_private_network,key"` // whether this plan is installable to a Common Runtime app Name string `json:"name" url:"name,key"` // unique name of this plan Price struct { Cents int `json:"cents" url:"cents,key"` // price in cents per unit of plan Unit string `json:"unit" url:"unit,key"` // unit of price for plan } `json:"price" url:"price,key"` // price SpaceDefault bool `json:"space_default" url:"space_default,key"` // whether this plan is the default for apps in Private Spaces State string `json:"state" url:"state,key"` // release status for plan UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when plan was updated Visible bool `json:"visible" url:"visible,key"` // whether this plan is publicly visible } // List existing plans. func (s *Service) PlanList(ctx context.Context, addOnServiceIdentity string, lr *ListRange) (PlanListResult, error) { var plan PlanListResult return plan, s.Get(ctx, &plan, fmt.Sprintf("/addon-services/%v/plans", addOnServiceIdentity), nil, lr) } // Rate Limit represents the number of request tokens each account // holds. Requests to this endpoint do not count towards the rate limit. type RateLimit struct { Remaining int `json:"remaining" url:"remaining,key"` // allowed requests remaining in current interval } type RateLimitInfoResult struct { Remaining int `json:"remaining" url:"remaining,key"` // allowed requests remaining in current interval } // Info for rate limits. func (s *Service) RateLimitInfo(ctx context.Context) (*RateLimitInfoResult, error) { var rateLimit RateLimitInfoResult return &rateLimit, s.Get(ctx, &rateLimit, fmt.Sprintf("/account/rate-limits"), nil, nil) } // A region represents a geographic location in which your application // may run. type Region struct { Country string `json:"country" url:"country,key"` // country where the region exists CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created Description string `json:"description" url:"description,key"` // description of region ID string `json:"id" url:"id,key"` // unique identifier of region Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists Name string `json:"name" url:"name,key"` // unique name of region PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space Provider struct { Name string `json:"name" url:"name,key"` // name of provider Region string `json:"region" url:"region,key"` // region name used by provider } `json:"provider" url:"provider,key"` // provider of underlying substrate UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated } type RegionInfoResult struct { Country string `json:"country" url:"country,key"` // country where the region exists CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created Description string `json:"description" url:"description,key"` // description of region ID string `json:"id" url:"id,key"` // unique identifier of region Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists Name string `json:"name" url:"name,key"` // unique name of region PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space Provider struct { Name string `json:"name" url:"name,key"` // name of provider Region string `json:"region" url:"region,key"` // region name used by provider } `json:"provider" url:"provider,key"` // provider of underlying substrate UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated } // Info for existing region. func (s *Service) RegionInfo(ctx context.Context, regionIdentity string) (*RegionInfoResult, error) { var region RegionInfoResult return ®ion, s.Get(ctx, ®ion, fmt.Sprintf("/regions/%v", regionIdentity), nil, nil) } type RegionListResult []struct { Country string `json:"country" url:"country,key"` // country where the region exists CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when region was created Description string `json:"description" url:"description,key"` // description of region ID string `json:"id" url:"id,key"` // unique identifier of region Locale string `json:"locale" url:"locale,key"` // area in the country where the region exists Name string `json:"name" url:"name,key"` // unique name of region PrivateCapable bool `json:"private_capable" url:"private_capable,key"` // whether or not region is available for creating a Private Space Provider struct { Name string `json:"name" url:"name,key"` // name of provider Region string `json:"region" url:"region,key"` // region name used by provider } `json:"provider" url:"provider,key"` // provider of underlying substrate UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when region was updated } // List existing regions. func (s *Service) RegionList(ctx context.Context, lr *ListRange) (RegionListResult, error) { var region RegionListResult return region, s.Get(ctx, ®ion, fmt.Sprintf("/regions"), nil, lr) } // A release represents a combination of code, config vars and add-ons // for an app on Heroku. type Release struct { AddonPlanNames []string `json:"addon_plan_names" url:"addon_plan_names,key"` // add-on plans installed on the app for this release App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the release CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when release was created Current bool `json:"current" url:"current,key"` // indicates this release as being the current one for the app Description string `json:"description" url:"description,key"` // description of changes in this release ID string `json:"id" url:"id,key"` // unique identifier of release Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug running in this release Status string `json:"status" url:"status,key"` // current status of the release UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when release was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that created the release Version int `json:"version" url:"version,key"` // unique version assigned to the release } type ReleaseInfoResult struct { AddonPlanNames []string `json:"addon_plan_names" url:"addon_plan_names,key"` // add-on plans installed on the app for this release App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the release CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when release was created Current bool `json:"current" url:"current,key"` // indicates this release as being the current one for the app Description string `json:"description" url:"description,key"` // description of changes in this release ID string `json:"id" url:"id,key"` // unique identifier of release Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug running in this release Status string `json:"status" url:"status,key"` // current status of the release UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when release was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that created the release Version int `json:"version" url:"version,key"` // unique version assigned to the release } // Info for existing release. func (s *Service) ReleaseInfo(ctx context.Context, appIdentity string, releaseIdentity string) (*ReleaseInfoResult, error) { var release ReleaseInfoResult return &release, s.Get(ctx, &release, fmt.Sprintf("/apps/%v/releases/%v", appIdentity, releaseIdentity), nil, nil) } type ReleaseListResult []struct { AddonPlanNames []string `json:"addon_plan_names" url:"addon_plan_names,key"` // add-on plans installed on the app for this release App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the release CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when release was created Current bool `json:"current" url:"current,key"` // indicates this release as being the current one for the app Description string `json:"description" url:"description,key"` // description of changes in this release ID string `json:"id" url:"id,key"` // unique identifier of release Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug running in this release Status string `json:"status" url:"status,key"` // current status of the release UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when release was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that created the release Version int `json:"version" url:"version,key"` // unique version assigned to the release } // List existing releases. func (s *Service) ReleaseList(ctx context.Context, appIdentity string, lr *ListRange) (ReleaseListResult, error) { var release ReleaseListResult return release, s.Get(ctx, &release, fmt.Sprintf("/apps/%v/releases", appIdentity), nil, lr) } type ReleaseCreateOpts struct { Description *string `json:"description,omitempty" url:"description,omitempty,key"` // description of changes in this release Slug string `json:"slug" url:"slug,key"` // unique identifier of slug } type ReleaseCreateResult struct { AddonPlanNames []string `json:"addon_plan_names" url:"addon_plan_names,key"` // add-on plans installed on the app for this release App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the release CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when release was created Current bool `json:"current" url:"current,key"` // indicates this release as being the current one for the app Description string `json:"description" url:"description,key"` // description of changes in this release ID string `json:"id" url:"id,key"` // unique identifier of release Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug running in this release Status string `json:"status" url:"status,key"` // current status of the release UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when release was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that created the release Version int `json:"version" url:"version,key"` // unique version assigned to the release } // Create new release. func (s *Service) ReleaseCreate(ctx context.Context, appIdentity string, o ReleaseCreateOpts) (*ReleaseCreateResult, error) { var release ReleaseCreateResult return &release, s.Post(ctx, &release, fmt.Sprintf("/apps/%v/releases", appIdentity), o) } type ReleaseRollbackOpts struct { Release string `json:"release" url:"release,key"` // unique identifier of release } type ReleaseRollbackResult struct { AddonPlanNames []string `json:"addon_plan_names" url:"addon_plan_names,key"` // add-on plans installed on the app for this release App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // app involved in the release CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when release was created Current bool `json:"current" url:"current,key"` // indicates this release as being the current one for the app Description string `json:"description" url:"description,key"` // description of changes in this release ID string `json:"id" url:"id,key"` // unique identifier of release Slug *struct { ID string `json:"id" url:"id,key"` // unique identifier of slug } `json:"slug" url:"slug,key"` // slug running in this release Status string `json:"status" url:"status,key"` // current status of the release UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when release was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // user that created the release Version int `json:"version" url:"version,key"` // unique version assigned to the release } // Rollback to an existing release. func (s *Service) ReleaseRollback(ctx context.Context, appIdentity string, o ReleaseRollbackOpts) (*ReleaseRollbackResult, error) { var release ReleaseRollbackResult return &release, s.Post(ctx, &release, fmt.Sprintf("/apps/%v/releases", appIdentity), o) } // A slug is a snapshot of your application code that is ready to run on // the platform. type Slug struct { Blob struct { Method string `json:"method" url:"method,key"` // method to be used to interact with the slug blob URL string `json:"url" url:"url,key"` // URL to interact with the slug blob } `json:"blob" url:"blob,key"` // pointer to the url where clients can fetch or store the actual // release binary BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of slug Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the slug for verifying its integrity Commit *string `json:"commit" url:"commit,key"` // identification of the code with your version control system (eg: SHA // of the git HEAD) CommitDescription *string `json:"commit_description" url:"commit_description,key"` // an optional description of the provided commit CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when slug was created ID string `json:"id" url:"id,key"` // unique identifier of slug ProcessTypes map[string]string `json:"process_types" url:"process_types,key"` // hash mapping process type names to their respective command Size *int `json:"size" url:"size,key"` // size of slug, in bytes Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of slug stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when slug was updated } type SlugInfoResult struct { Blob struct { Method string `json:"method" url:"method,key"` // method to be used to interact with the slug blob URL string `json:"url" url:"url,key"` // URL to interact with the slug blob } `json:"blob" url:"blob,key"` // pointer to the url where clients can fetch or store the actual // release binary BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of slug Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the slug for verifying its integrity Commit *string `json:"commit" url:"commit,key"` // identification of the code with your version control system (eg: SHA // of the git HEAD) CommitDescription *string `json:"commit_description" url:"commit_description,key"` // an optional description of the provided commit CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when slug was created ID string `json:"id" url:"id,key"` // unique identifier of slug ProcessTypes map[string]string `json:"process_types" url:"process_types,key"` // hash mapping process type names to their respective command Size *int `json:"size" url:"size,key"` // size of slug, in bytes Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of slug stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when slug was updated } // Info for existing slug. func (s *Service) SlugInfo(ctx context.Context, appIdentity string, slugIdentity string) (*SlugInfoResult, error) { var slug SlugInfoResult return &slug, s.Get(ctx, &slug, fmt.Sprintf("/apps/%v/slugs/%v", appIdentity, slugIdentity), nil, nil) } type SlugCreateOpts struct { BuildpackProvidedDescription *string `json:"buildpack_provided_description,omitempty" url:"buildpack_provided_description,omitempty,key"` // description from buildpack of slug Checksum *string `json:"checksum,omitempty" url:"checksum,omitempty,key"` // an optional checksum of the slug for verifying its integrity Commit *string `json:"commit,omitempty" url:"commit,omitempty,key"` // identification of the code with your version control system (eg: SHA // of the git HEAD) CommitDescription *string `json:"commit_description,omitempty" url:"commit_description,omitempty,key"` // an optional description of the provided commit ProcessTypes map[string]string `json:"process_types" url:"process_types,key"` // hash mapping process type names to their respective command Stack *string `json:"stack,omitempty" url:"stack,omitempty,key"` // unique name of stack } type SlugCreateResult struct { Blob struct { Method string `json:"method" url:"method,key"` // method to be used to interact with the slug blob URL string `json:"url" url:"url,key"` // URL to interact with the slug blob } `json:"blob" url:"blob,key"` // pointer to the url where clients can fetch or store the actual // release binary BuildpackProvidedDescription *string `json:"buildpack_provided_description" url:"buildpack_provided_description,key"` // description from buildpack of slug Checksum *string `json:"checksum" url:"checksum,key"` // an optional checksum of the slug for verifying its integrity Commit *string `json:"commit" url:"commit,key"` // identification of the code with your version control system (eg: SHA // of the git HEAD) CommitDescription *string `json:"commit_description" url:"commit_description,key"` // an optional description of the provided commit CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when slug was created ID string `json:"id" url:"id,key"` // unique identifier of slug ProcessTypes map[string]string `json:"process_types" url:"process_types,key"` // hash mapping process type names to their respective command Size *int `json:"size" url:"size,key"` // size of slug, in bytes Stack struct { ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack } `json:"stack" url:"stack,key"` // identity of slug stack UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when slug was updated } // Create a new slug. For more information please refer to [Deploying // Slugs using the Platform // API](https://devcenter.heroku.com/articles/platform-api-deploying-slug // s). func (s *Service) SlugCreate(ctx context.Context, appIdentity string, o SlugCreateOpts) (*SlugCreateResult, error) { var slug SlugCreateResult return &slug, s.Post(ctx, &slug, fmt.Sprintf("/apps/%v/slugs", appIdentity), o) } // SMS numbers are used for recovery on accounts with two-factor // authentication enabled. type SmsNumber struct { SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account } type SmsNumberSMSNumberResult struct { SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account } // Recover an account using an SMS recovery code func (s *Service) SmsNumberSMSNumber(ctx context.Context, accountIdentity string) (*SmsNumberSMSNumberResult, error) { var smsNumber SmsNumberSMSNumberResult return &smsNumber, s.Get(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number", accountIdentity), nil, nil) } type SmsNumberRecoverResult struct { SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account } // Recover an account using an SMS recovery code func (s *Service) SmsNumberRecover(ctx context.Context, accountIdentity string) (*SmsNumberRecoverResult, error) { var smsNumber SmsNumberRecoverResult return &smsNumber, s.Post(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number/actions/recover", accountIdentity), nil) } type SmsNumberConfirmResult struct { SmsNumber *string `json:"sms_number" url:"sms_number,key"` // SMS number of account } // Confirm an SMS number change with a confirmation code func (s *Service) SmsNumberConfirm(ctx context.Context, accountIdentity string) (*SmsNumberConfirmResult, error) { var smsNumber SmsNumberConfirmResult return &smsNumber, s.Post(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number/actions/confirm", accountIdentity), nil) } // SNI Endpoint is a public address serving a custom SSL cert for HTTPS // traffic, using the SNI TLS extension, to a Heroku app. type SniEndpoint struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this // app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint Name string `json:"name" url:"name,key"` // unique name for SNI endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated } type SniEndpointCreateOpts struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) PrivateKey string `json:"private_key" url:"private_key,key"` // contents of the private key (eg .key file) } type SniEndpointCreateResult struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this // app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint Name string `json:"name" url:"name,key"` // unique name for SNI endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated } // Create a new SNI endpoint. func (s *Service) SniEndpointCreate(ctx context.Context, appIdentity string, o SniEndpointCreateOpts) (*SniEndpointCreateResult, error) { var sniEndpoint SniEndpointCreateResult return &sniEndpoint, s.Post(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints", appIdentity), o) } type SniEndpointDeleteResult struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this // app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint Name string `json:"name" url:"name,key"` // unique name for SNI endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated } // Delete existing SNI endpoint. func (s *Service) SniEndpointDelete(ctx context.Context, appIdentity string, sniEndpointIdentity string) (*SniEndpointDeleteResult, error) { var sniEndpoint SniEndpointDeleteResult return &sniEndpoint, s.Delete(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity)) } type SniEndpointInfoResult struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this // app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint Name string `json:"name" url:"name,key"` // unique name for SNI endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated } // Info for existing SNI endpoint. func (s *Service) SniEndpointInfo(ctx context.Context, appIdentity string, sniEndpointIdentity string) (*SniEndpointInfoResult, error) { var sniEndpoint SniEndpointInfoResult return &sniEndpoint, s.Get(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity), nil, nil) } type SniEndpointListResult []struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this // app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint Name string `json:"name" url:"name,key"` // unique name for SNI endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated } // List existing SNI endpoints. func (s *Service) SniEndpointList(ctx context.Context, appIdentity string, lr *ListRange) (SniEndpointListResult, error) { var sniEndpoint SniEndpointListResult return sniEndpoint, s.Get(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints", appIdentity), nil, lr) } type SniEndpointUpdateOpts struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) PrivateKey string `json:"private_key" url:"private_key,key"` // contents of the private key (eg .key file) } type SniEndpointUpdateResult struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this // app CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SNI endpoint Name string `json:"name" url:"name,key"` // unique name for SNI endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when SNI endpoint was updated } // Update an existing SNI endpoint. func (s *Service) SniEndpointUpdate(ctx context.Context, appIdentity string, sniEndpointIdentity string, o SniEndpointUpdateOpts) (*SniEndpointUpdateResult, error) { var sniEndpoint SniEndpointUpdateResult return &sniEndpoint, s.Patch(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity), o) } // A source is a location for uploading and downloading an application's // source code. type Source struct { SourceBlob struct { GetURL string `json:"get_url" url:"get_url,key"` // URL to download the source PutURL string `json:"put_url" url:"put_url,key"` // URL to upload the source } `json:"source_blob" url:"source_blob,key"` // pointer to the URL where clients can fetch or store the source } type SourceCreateResult struct { SourceBlob struct { GetURL string `json:"get_url" url:"get_url,key"` // URL to download the source PutURL string `json:"put_url" url:"put_url,key"` // URL to upload the source } `json:"source_blob" url:"source_blob,key"` // pointer to the URL where clients can fetch or store the source } // Create URLs for uploading and downloading source. func (s *Service) SourceCreate(ctx context.Context) (*SourceCreateResult, error) { var source SourceCreateResult return &source, s.Post(ctx, &source, fmt.Sprintf("/sources"), nil) } type SourceCreateDeprecatedResult struct { SourceBlob struct { GetURL string `json:"get_url" url:"get_url,key"` // URL to download the source PutURL string `json:"put_url" url:"put_url,key"` // URL to upload the source } `json:"source_blob" url:"source_blob,key"` // pointer to the URL where clients can fetch or store the source } // Create URLs for uploading and downloading source. Deprecated in favor // of `POST /sources` func (s *Service) SourceCreateDeprecated(ctx context.Context, appIdentity string) (*SourceCreateDeprecatedResult, error) { var source SourceCreateDeprecatedResult return &source, s.Post(ctx, &source, fmt.Sprintf("/apps/%v/sources", appIdentity), nil) } // A space is an isolated, highly available, secure app execution // environments, running in the modern VPC substrate. type Space struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this space Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of space region Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled State string `json:"state" url:"state,key"` // availability of this space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated } type SpaceListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this space Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of space region Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled State string `json:"state" url:"state,key"` // availability of this space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated } // List existing spaces. func (s *Service) SpaceList(ctx context.Context, lr *ListRange) (SpaceListResult, error) { var space SpaceListResult return space, s.Get(ctx, &space, fmt.Sprintf("/spaces"), nil, lr) } type SpaceInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this space Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of space region Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled State string `json:"state" url:"state,key"` // availability of this space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated } // Info for existing space. func (s *Service) SpaceInfo(ctx context.Context, spaceIdentity string) (*SpaceInfoResult, error) { var space SpaceInfoResult return &space, s.Get(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity), nil, nil) } type SpaceUpdateOpts struct { Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of space } type SpaceUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this space Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of space region Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled State string `json:"state" url:"state,key"` // availability of this space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated } // Update an existing space. func (s *Service) SpaceUpdate(ctx context.Context, spaceIdentity string, o SpaceUpdateOpts) (*SpaceUpdateResult, error) { var space SpaceUpdateResult return &space, s.Patch(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity), o) } type SpaceDeleteResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this space Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of space region Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled State string `json:"state" url:"state,key"` // availability of this space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated } // Delete an existing space. func (s *Service) SpaceDelete(ctx context.Context, spaceIdentity string) (*SpaceDeleteResult, error) { var space SpaceDeleteResult return &space, s.Delete(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity)) } type SpaceCreateOpts struct { Name string `json:"name" url:"name,key"` // unique name of space Organization string `json:"organization" url:"organization,key"` // unique name of organization Region *string `json:"region,omitempty" url:"region,omitempty,key"` // unique identifier of region Shield *bool `json:"shield,omitempty" url:"shield,omitempty,key"` // true if this space has shield enabled } type SpaceCreateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Name string `json:"name" url:"name,key"` // unique name of space Organization struct { Name string `json:"name" url:"name,key"` // unique name of organization } `json:"organization" url:"organization,key"` // organization that owns this space Region struct { ID string `json:"id" url:"id,key"` // unique identifier of region Name string `json:"name" url:"name,key"` // unique name of region } `json:"region" url:"region,key"` // identity of space region Shield bool `json:"shield" url:"shield,key"` // true if this space has shield enabled State string `json:"state" url:"state,key"` // availability of this space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated } // Create a new space. func (s *Service) SpaceCreate(ctx context.Context, o SpaceCreateOpts) (*SpaceCreateResult, error) { var space SpaceCreateResult return &space, s.Post(ctx, &space, fmt.Sprintf("/spaces"), o) } // Space access represents the permissions a particular user has on a // particular space. type SpaceAppAccess struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Permissions []struct { Description string `json:"description" url:"description,key"` Name string `json:"name" url:"name,key"` } `json:"permissions" url:"permissions,key"` // user space permissions Space struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"space" url:"space,key"` // space user belongs to UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of user account } type SpaceAppAccessInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Permissions []struct { Description string `json:"description" url:"description,key"` Name string `json:"name" url:"name,key"` } `json:"permissions" url:"permissions,key"` // user space permissions Space struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"space" url:"space,key"` // space user belongs to UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of user account } // List permissions for a given user on a given space. func (s *Service) SpaceAppAccessInfo(ctx context.Context, spaceIdentity string, accountIdentity string) (*SpaceAppAccessInfoResult, error) { var spaceAppAccess SpaceAppAccessInfoResult return &spaceAppAccess, s.Get(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members/%v", spaceIdentity, accountIdentity), nil, nil) } type SpaceAppAccessUpdateOpts struct { Permissions *[]*struct { Name *string `json:"name,omitempty" url:"name,omitempty,key"` } `json:"permissions,omitempty" url:"permissions,omitempty,key"` } type SpaceAppAccessUpdateResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Permissions []struct { Description string `json:"description" url:"description,key"` Name string `json:"name" url:"name,key"` } `json:"permissions" url:"permissions,key"` // user space permissions Space struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"space" url:"space,key"` // space user belongs to UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of user account } // Update an existing user's set of permissions on a space. func (s *Service) SpaceAppAccessUpdate(ctx context.Context, spaceIdentity string, accountIdentity string, o SpaceAppAccessUpdateOpts) (*SpaceAppAccessUpdateResult, error) { var spaceAppAccess SpaceAppAccessUpdateResult return &spaceAppAccess, s.Patch(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members/%v", spaceIdentity, accountIdentity), o) } type SpaceAppAccessListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when space was created ID string `json:"id" url:"id,key"` // unique identifier of space Permissions []struct { Description string `json:"description" url:"description,key"` Name string `json:"name" url:"name,key"` } `json:"permissions" url:"permissions,key"` // user space permissions Space struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"space" url:"space,key"` // space user belongs to UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated User struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"user" url:"user,key"` // identity of user account } // List all users and their permissions on a space. func (s *Service) SpaceAppAccessList(ctx context.Context, spaceIdentity string, lr *ListRange) (SpaceAppAccessListResult, error) { var spaceAppAccess SpaceAppAccessListResult return spaceAppAccess, s.Get(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members", spaceIdentity), nil, lr) } // Network address translation (NAT) for stable outbound IP addresses // from a space type SpaceNat struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when network address translation for a space was created Sources []string `json:"sources" url:"sources,key"` // potential IPs from which outbound network traffic will originate State string `json:"state" url:"state,key"` // availability of network address translation for a space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when network address translation for a space was updated } type SpaceNatInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when network address translation for a space was created Sources []string `json:"sources" url:"sources,key"` // potential IPs from which outbound network traffic will originate State string `json:"state" url:"state,key"` // availability of network address translation for a space UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when network address translation for a space was updated } // Current state of network address translation for a space. func (s *Service) SpaceNatInfo(ctx context.Context, spaceIdentity string) (*SpaceNatInfoResult, error) { var spaceNat SpaceNatInfoResult return &spaceNat, s.Get(ctx, &spaceNat, fmt.Sprintf("/spaces/%v/nat", spaceIdentity), nil, nil) } // [SSL Endpoint](https://devcenter.heroku.com/articles/ssl-endpoint) is // a public address serving custom SSL cert for HTTPS traffic to a // Heroku app. Note that an app must have the `ssl:endpoint` add-on // installed before it can provision an SSL Endpoint using these APIs. type SSLEndpoint struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application associated with this ssl-endpoint CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint Name string `json:"name" url:"name,key"` // unique name for SSL endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated } type SSLEndpointCreateOpts struct { CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) Preprocess *bool `json:"preprocess,omitempty" url:"preprocess,omitempty,key"` // allow Heroku to modify an uploaded public certificate chain if deemed // advantageous by adding missing intermediaries, stripping unnecessary // ones, etc. PrivateKey string `json:"private_key" url:"private_key,key"` // contents of the private key (eg .key file) } type SSLEndpointCreateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application associated with this ssl-endpoint CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint Name string `json:"name" url:"name,key"` // unique name for SSL endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated } // Create a new SSL endpoint. func (s *Service) SSLEndpointCreate(ctx context.Context, appIdentity string, o SSLEndpointCreateOpts) (*SSLEndpointCreateResult, error) { var sslEndpoint SSLEndpointCreateResult return &sslEndpoint, s.Post(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), o) } type SSLEndpointDeleteResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application associated with this ssl-endpoint CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint Name string `json:"name" url:"name,key"` // unique name for SSL endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated } // Delete existing SSL endpoint. func (s *Service) SSLEndpointDelete(ctx context.Context, appIdentity string, sslEndpointIdentity string) (*SSLEndpointDeleteResult, error) { var sslEndpoint SSLEndpointDeleteResult return &sslEndpoint, s.Delete(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity)) } type SSLEndpointInfoResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application associated with this ssl-endpoint CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint Name string `json:"name" url:"name,key"` // unique name for SSL endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated } // Info for existing SSL endpoint. func (s *Service) SSLEndpointInfo(ctx context.Context, appIdentity string, sslEndpointIdentity string) (*SSLEndpointInfoResult, error) { var sslEndpoint SSLEndpointInfoResult return &sslEndpoint, s.Get(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), nil, nil) } type SSLEndpointListResult []struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application associated with this ssl-endpoint CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint Name string `json:"name" url:"name,key"` // unique name for SSL endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated } // List existing SSL endpoints. func (s *Service) SSLEndpointList(ctx context.Context, appIdentity string, lr *ListRange) (SSLEndpointListResult, error) { var sslEndpoint SSLEndpointListResult return sslEndpoint, s.Get(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), nil, lr) } type SSLEndpointUpdateOpts struct { CertificateChain *string `json:"certificate_chain,omitempty" url:"certificate_chain,omitempty,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) Preprocess *bool `json:"preprocess,omitempty" url:"preprocess,omitempty,key"` // allow Heroku to modify an uploaded public certificate chain if deemed // advantageous by adding missing intermediaries, stripping unnecessary // ones, etc. PrivateKey *string `json:"private_key,omitempty" url:"private_key,omitempty,key"` // contents of the private key (eg .key file) Rollback *bool `json:"rollback,omitempty" url:"rollback,omitempty,key"` // indicates that a rollback should be performed } type SSLEndpointUpdateResult struct { App struct { ID string `json:"id" url:"id,key"` // unique identifier of app Name string `json:"name" url:"name,key"` // unique name of app } `json:"app" url:"app,key"` // application associated with this ssl-endpoint CertificateChain string `json:"certificate_chain" url:"certificate_chain,key"` // raw contents of the public certificate chain (eg: .crt or .pem file) CName string `json:"cname" url:"cname,key"` // canonical name record, the address to point a domain at CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when endpoint was created ID string `json:"id" url:"id,key"` // unique identifier of this SSL endpoint Name string `json:"name" url:"name,key"` // unique name for SSL endpoint UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when endpoint was updated } // Update an existing SSL endpoint. func (s *Service) SSLEndpointUpdate(ctx context.Context, appIdentity string, sslEndpointIdentity string, o SSLEndpointUpdateOpts) (*SSLEndpointUpdateResult, error) { var sslEndpoint SSLEndpointUpdateResult return &sslEndpoint, s.Patch(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), o) } // Stacks are the different application execution environments available // in the Heroku platform. type Stack struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when stack was introduced ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack State string `json:"state" url:"state,key"` // availability of this stack: beta, deprecated or public UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when stack was last modified } type StackInfoResult struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when stack was introduced ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack State string `json:"state" url:"state,key"` // availability of this stack: beta, deprecated or public UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when stack was last modified } // Stack info. func (s *Service) StackInfo(ctx context.Context, stackIdentity string) (*StackInfoResult, error) { var stack StackInfoResult return &stack, s.Get(ctx, &stack, fmt.Sprintf("/stacks/%v", stackIdentity), nil, nil) } type StackListResult []struct { CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when stack was introduced ID string `json:"id" url:"id,key"` // unique identifier of stack Name string `json:"name" url:"name,key"` // unique name of stack State string `json:"state" url:"state,key"` // availability of this stack: beta, deprecated or public UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when stack was last modified } // List available stacks. func (s *Service) StackList(ctx context.Context, lr *ListRange) (StackListResult, error) { var stack StackListResult return stack, s.Get(ctx, &stack, fmt.Sprintf("/stacks"), nil, lr) } // Tracks a user's preferences and message dismissals type UserPreferences struct { DefaultOrganization *string `json:"default-organization" url:"default-organization,key"` // User's default organization DismissedGettingStarted *bool `json:"dismissed-getting-started" url:"dismissed-getting-started,key"` // Whether the user has dismissed the getting started banner DismissedGithubBanner *bool `json:"dismissed-github-banner" url:"dismissed-github-banner,key"` // Whether the user has dismissed the GitHub link banner DismissedOrgAccessControls *bool `json:"dismissed-org-access-controls" url:"dismissed-org-access-controls,key"` // Whether the user has dismissed the Organization Access Controls // banner DismissedOrgWizardNotification *bool `json:"dismissed-org-wizard-notification" url:"dismissed-org-wizard-notification,key"` // Whether the user has dismissed the Organization Wizard DismissedPipelinesBanner *bool `json:"dismissed-pipelines-banner" url:"dismissed-pipelines-banner,key"` // Whether the user has dismissed the Pipelines banner DismissedPipelinesGithubBanner *bool `json:"dismissed-pipelines-github-banner" url:"dismissed-pipelines-github-banner,key"` // Whether the user has dismissed the GitHub banner on a pipeline // overview DismissedPipelinesGithubBanners *[]string `json:"dismissed-pipelines-github-banners" url:"dismissed-pipelines-github-banners,key"` // Which pipeline uuids the user has dismissed the GitHub banner for DismissedSmsBanner *bool `json:"dismissed-sms-banner" url:"dismissed-sms-banner,key"` // Whether the user has dismissed the 2FA SMS banner Timezone *string `json:"timezone" url:"timezone,key"` // User's default timezone } type UserPreferencesListResult struct { DefaultOrganization *string `json:"default-organization" url:"default-organization,key"` // User's default organization DismissedGettingStarted *bool `json:"dismissed-getting-started" url:"dismissed-getting-started,key"` // Whether the user has dismissed the getting started banner DismissedGithubBanner *bool `json:"dismissed-github-banner" url:"dismissed-github-banner,key"` // Whether the user has dismissed the GitHub link banner DismissedOrgAccessControls *bool `json:"dismissed-org-access-controls" url:"dismissed-org-access-controls,key"` // Whether the user has dismissed the Organization Access Controls // banner DismissedOrgWizardNotification *bool `json:"dismissed-org-wizard-notification" url:"dismissed-org-wizard-notification,key"` // Whether the user has dismissed the Organization Wizard DismissedPipelinesBanner *bool `json:"dismissed-pipelines-banner" url:"dismissed-pipelines-banner,key"` // Whether the user has dismissed the Pipelines banner DismissedPipelinesGithubBanner *bool `json:"dismissed-pipelines-github-banner" url:"dismissed-pipelines-github-banner,key"` // Whether the user has dismissed the GitHub banner on a pipeline // overview DismissedPipelinesGithubBanners *[]string `json:"dismissed-pipelines-github-banners" url:"dismissed-pipelines-github-banners,key"` // Which pipeline uuids the user has dismissed the GitHub banner for DismissedSmsBanner *bool `json:"dismissed-sms-banner" url:"dismissed-sms-banner,key"` // Whether the user has dismissed the 2FA SMS banner Timezone *string `json:"timezone" url:"timezone,key"` // User's default timezone } // Retrieve User Preferences func (s *Service) UserPreferencesList(ctx context.Context, userPreferencesIdentity string) (*UserPreferencesListResult, error) { var userPreferences UserPreferencesListResult return &userPreferences, s.Get(ctx, &userPreferences, fmt.Sprintf("/users/%v/preferences", userPreferencesIdentity), nil, nil) } type UserPreferencesUpdateOpts struct { DefaultOrganization *string `json:"default-organization,omitempty" url:"default-organization,omitempty,key"` // User's default organization DismissedGettingStarted *bool `json:"dismissed-getting-started,omitempty" url:"dismissed-getting-started,omitempty,key"` // Whether the user has dismissed the getting started banner DismissedGithubBanner *bool `json:"dismissed-github-banner,omitempty" url:"dismissed-github-banner,omitempty,key"` // Whether the user has dismissed the GitHub link banner DismissedOrgAccessControls *bool `json:"dismissed-org-access-controls,omitempty" url:"dismissed-org-access-controls,omitempty,key"` // Whether the user has dismissed the Organization Access Controls // banner DismissedOrgWizardNotification *bool `json:"dismissed-org-wizard-notification,omitempty" url:"dismissed-org-wizard-notification,omitempty,key"` // Whether the user has dismissed the Organization Wizard DismissedPipelinesBanner *bool `json:"dismissed-pipelines-banner,omitempty" url:"dismissed-pipelines-banner,omitempty,key"` // Whether the user has dismissed the Pipelines banner DismissedPipelinesGithubBanner *bool `json:"dismissed-pipelines-github-banner,omitempty" url:"dismissed-pipelines-github-banner,omitempty,key"` // Whether the user has dismissed the GitHub banner on a pipeline // overview DismissedPipelinesGithubBanners *[]*string `json:"dismissed-pipelines-github-banners,omitempty" url:"dismissed-pipelines-github-banners,omitempty,key"` // Which pipeline uuids the user has dismissed the GitHub banner for DismissedSmsBanner *bool `json:"dismissed-sms-banner,omitempty" url:"dismissed-sms-banner,omitempty,key"` // Whether the user has dismissed the 2FA SMS banner Timezone *string `json:"timezone,omitempty" url:"timezone,omitempty,key"` // User's default timezone } type UserPreferencesUpdateResult struct { DefaultOrganization *string `json:"default-organization" url:"default-organization,key"` // User's default organization DismissedGettingStarted *bool `json:"dismissed-getting-started" url:"dismissed-getting-started,key"` // Whether the user has dismissed the getting started banner DismissedGithubBanner *bool `json:"dismissed-github-banner" url:"dismissed-github-banner,key"` // Whether the user has dismissed the GitHub link banner DismissedOrgAccessControls *bool `json:"dismissed-org-access-controls" url:"dismissed-org-access-controls,key"` // Whether the user has dismissed the Organization Access Controls // banner DismissedOrgWizardNotification *bool `json:"dismissed-org-wizard-notification" url:"dismissed-org-wizard-notification,key"` // Whether the user has dismissed the Organization Wizard DismissedPipelinesBanner *bool `json:"dismissed-pipelines-banner" url:"dismissed-pipelines-banner,key"` // Whether the user has dismissed the Pipelines banner DismissedPipelinesGithubBanner *bool `json:"dismissed-pipelines-github-banner" url:"dismissed-pipelines-github-banner,key"` // Whether the user has dismissed the GitHub banner on a pipeline // overview DismissedPipelinesGithubBanners *[]string `json:"dismissed-pipelines-github-banners" url:"dismissed-pipelines-github-banners,key"` // Which pipeline uuids the user has dismissed the GitHub banner for DismissedSmsBanner *bool `json:"dismissed-sms-banner" url:"dismissed-sms-banner,key"` // Whether the user has dismissed the 2FA SMS banner Timezone *string `json:"timezone" url:"timezone,key"` // User's default timezone } // Update User Preferences func (s *Service) UserPreferencesUpdate(ctx context.Context, userPreferencesIdentity string, o UserPreferencesUpdateOpts) (*UserPreferencesUpdateResult, error) { var userPreferences UserPreferencesUpdateResult return &userPreferences, s.Patch(ctx, &userPreferences, fmt.Sprintf("/users/%v/preferences", userPreferencesIdentity), o) } // Entities that have been whitelisted to be used by an Organization type WhitelistedAddOnService struct { AddedAt time.Time `json:"added_at" url:"added_at,key"` // when the add-on service was whitelisted AddedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"added_by" url:"added_by,key"` // the user which whitelisted the Add-on Service AddonService struct { HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // the Add-on Service whitelisted for use ID string `json:"id" url:"id,key"` // unique identifier for this whitelisting entity } type WhitelistedAddOnServiceListResult []struct { AddedAt time.Time `json:"added_at" url:"added_at,key"` // when the add-on service was whitelisted AddedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"added_by" url:"added_by,key"` // the user which whitelisted the Add-on Service AddonService struct { HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // the Add-on Service whitelisted for use ID string `json:"id" url:"id,key"` // unique identifier for this whitelisting entity } // List all whitelisted Add-on Services for an Organization func (s *Service) WhitelistedAddOnServiceList(ctx context.Context, organizationIdentity string, lr *ListRange) (WhitelistedAddOnServiceListResult, error) { var whitelistedAddOnService WhitelistedAddOnServiceListResult return whitelistedAddOnService, s.Get(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services", organizationIdentity), nil, lr) } type WhitelistedAddOnServiceCreateOpts struct { AddonService *string `json:"addon_service,omitempty" url:"addon_service,omitempty,key"` // name of the Add-on to whitelist } type WhitelistedAddOnServiceCreateResult []struct { AddedAt time.Time `json:"added_at" url:"added_at,key"` // when the add-on service was whitelisted AddedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"added_by" url:"added_by,key"` // the user which whitelisted the Add-on Service AddonService struct { HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // the Add-on Service whitelisted for use ID string `json:"id" url:"id,key"` // unique identifier for this whitelisting entity } // Whitelist an Add-on Service func (s *Service) WhitelistedAddOnServiceCreate(ctx context.Context, organizationIdentity string, o WhitelistedAddOnServiceCreateOpts) (WhitelistedAddOnServiceCreateResult, error) { var whitelistedAddOnService WhitelistedAddOnServiceCreateResult return whitelistedAddOnService, s.Post(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services", organizationIdentity), o) } type WhitelistedAddOnServiceDeleteResult struct { AddedAt time.Time `json:"added_at" url:"added_at,key"` // when the add-on service was whitelisted AddedBy struct { Email string `json:"email" url:"email,key"` // unique email address of account ID string `json:"id" url:"id,key"` // unique identifier of an account } `json:"added_by" url:"added_by,key"` // the user which whitelisted the Add-on Service AddonService struct { HumanName string `json:"human_name" url:"human_name,key"` // human-readable name of the add-on service provider ID string `json:"id" url:"id,key"` // unique identifier of this add-on-service Name string `json:"name" url:"name,key"` // unique name of this add-on-service } `json:"addon_service" url:"addon_service,key"` // the Add-on Service whitelisted for use ID string `json:"id" url:"id,key"` // unique identifier for this whitelisting entity } // Remove a whitelisted entity func (s *Service) WhitelistedAddOnServiceDelete(ctx context.Context, organizationIdentity string, whitelistedAddOnServiceIdentity string) (*WhitelistedAddOnServiceDeleteResult, error) { var whitelistedAddOnService WhitelistedAddOnServiceDeleteResult return &whitelistedAddOnService, s.Delete(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services/%v", organizationIdentity, whitelistedAddOnServiceIdentity)) }