terraform/vendor/github.com/cyberdelia/heroku-go/v3/heroku.go

4097 lines
242 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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"
"strings"
"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
params := make([]string, 0, 2)
if lr.Max != 0 {
params = append(params, fmt.Sprintf("max=%d", lr.Max))
}
if lr.Descending {
params = append(params, "order=desc")
}
if len(params) > 0 {
hdrval += fmt.Sprintf("; %s", strings.Join(params, ","))
}
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
}
// Info for account.
func (s *Service) AccountInfo(ctx context.Context) (*Account, error) {
var account Account
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
}
// Update account.
func (s *Service) AccountUpdate(ctx context.Context, o AccountUpdateOpts) (*Account, error) {
var account Account
return &account, s.Patch(ctx, &account, fmt.Sprintf("/account"), o)
}
// Delete account. Note that this action cannot be undone.
func (s *Service) AccountDelete(ctx context.Context) (*Account, error) {
var account Account
return &account, s.Delete(ctx, &account, fmt.Sprintf("/account"))
}
// Info for account.
func (s *Service) AccountInfoByUser(ctx context.Context, accountIdentity string) (*Account, error) {
var account Account
return &account, s.Get(ctx, &account, fmt.Sprintf("/users/%v", accountIdentity), nil, nil)
}
type AccountUpdateByUserOpts 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
}
// Update account.
func (s *Service) AccountUpdateByUser(ctx context.Context, accountIdentity string, o AccountUpdateByUserOpts) (*Account, error) {
var account Account
return &account, s.Patch(ctx, &account, fmt.Sprintf("/users/%v", accountIdentity), o)
}
// Delete account. Note that this action cannot be undone.
func (s *Service) AccountDeleteByUser(ctx context.Context, accountIdentity string) (*Account, error) {
var account Account
return &account, s.Delete(ctx, &account, fmt.Sprintf("/users/%v", accountIdentity))
}
// 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
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
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
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
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) (*AccountFeature, error) {
var accountFeature AccountFeature
return &accountFeature, s.Get(ctx, &accountFeature, fmt.Sprintf("/account/features/%v", accountFeatureIdentity), nil, nil)
}
type AccountFeatureListResult []AccountFeature
// 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
}
// Update an existing account feature.
func (s *Service) AccountFeatureUpdate(ctx context.Context, accountFeatureIdentity string, o AccountFeatureUpdateOpts) (*AccountFeature, error) {
var accountFeature AccountFeature
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 AddOnListResult []AddOn
// 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)
}
// Info for an existing add-on.
func (s *Service) AddOnInfo(ctx context.Context, addOnIdentity string) (*AddOn, error) {
var addOn AddOn
return &addOn, s.Get(ctx, &addOn, fmt.Sprintf("/addons/%v", addOnIdentity), nil, nil)
}
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
}
// Create a new add-on.
func (s *Service) AddOnCreate(ctx context.Context, appIdentity string, o AddOnCreateOpts) (*AddOn, error) {
var addOn AddOn
return &addOn, s.Post(ctx, &addOn, fmt.Sprintf("/apps/%v/addons", appIdentity), o)
}
// Delete an existing add-on.
func (s *Service) AddOnDelete(ctx context.Context, appIdentity string, addOnIdentity string) (*AddOn, error) {
var addOn AddOn
return &addOn, s.Delete(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity))
}
// Info for an existing add-on.
func (s *Service) AddOnInfoByApp(ctx context.Context, appIdentity string, addOnIdentity string) (*AddOn, error) {
var addOn AddOn
return &addOn, s.Get(ctx, &addOn, fmt.Sprintf("/apps/%v/addons/%v", appIdentity, addOnIdentity), nil, nil)
}
type AddOnListByAppResult []AddOn
// 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)
}
type AddOnListByUserResult []AddOn
// 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 AddOnListByTeamResult []AddOn
// List add-ons used across all Team apps
func (s *Service) AddOnListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (AddOnListByTeamResult, error) {
var addOn AddOnListByTeamResult
return addOn, s.Get(ctx, &addOn, fmt.Sprintf("/teams/%v/addons", teamIdentity), nil, lr)
}
// 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 AddOnActionProvisionResult 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) AddOnActionProvision(ctx context.Context, addOnIdentity string) (*AddOnActionProvisionResult, error) {
var addOnAction AddOnActionProvisionResult
return &addOnAction, s.Post(ctx, &addOnAction, fmt.Sprintf("/addons/%v/actions/provision", addOnIdentity), nil)
}
type AddOnActionDeprovisionResult 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) AddOnActionDeprovision(ctx context.Context, addOnIdentity string) (*AddOnActionDeprovisionResult, error) {
var addOnAction AddOnActionDeprovisionResult
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
Namespace *string `json:"namespace" url:"namespace,key"` // attachment namespace
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
Namespace *string `json:"namespace,omitempty" url:"namespace,omitempty,key"` // attachment namespace
}
// Create a new add-on attachment.
func (s *Service) AddOnAttachmentCreate(ctx context.Context, o AddOnAttachmentCreateOpts) (*AddOnAttachment, error) {
var addOnAttachment AddOnAttachment
return &addOnAttachment, s.Post(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments"), o)
}
// Delete an existing add-on attachment.
func (s *Service) AddOnAttachmentDelete(ctx context.Context, addOnAttachmentIdentity string) (*AddOnAttachment, error) {
var addOnAttachment AddOnAttachment
return &addOnAttachment, s.Delete(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments/%v", addOnAttachmentIdentity))
}
// Info for existing add-on attachment.
func (s *Service) AddOnAttachmentInfo(ctx context.Context, addOnAttachmentIdentity string) (*AddOnAttachment, error) {
var addOnAttachment AddOnAttachment
return &addOnAttachment, s.Get(ctx, &addOnAttachment, fmt.Sprintf("/addon-attachments/%v", addOnAttachmentIdentity), nil, nil)
}
type AddOnAttachmentListResult []AddOnAttachment
// 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 []AddOnAttachment
// 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 []AddOnAttachment
// 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)
}
// Info for existing add-on attachment for an app.
func (s *Service) AddOnAttachmentInfoByApp(ctx context.Context, appIdentity string, addOnAttachmentScopedIdentity string) (*AddOnAttachment, error) {
var addOnAttachment AddOnAttachment
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 []AddOnConfig
// 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 []AddOnConfig
// 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 []AddOnRegionCapability
// 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 []AddOnRegionCapability
// 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)
}
type AddOnRegionCapabilityListByRegionResult []AddOnRegionCapability
// List existing add-on region capabilities for a region.
func (s *Service) AddOnRegionCapabilityListByRegion(ctx context.Context, regionIdentity string, lr *ListRange) (AddOnRegionCapabilityListByRegionResult, error) {
var addOnRegionCapability AddOnRegionCapabilityListByRegionResult
return addOnRegionCapability, s.Get(ctx, &addOnRegionCapability, fmt.Sprintf("/regions/%v/addon-region-capabilities", regionIdentity), 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
}
// Info for existing add-on-service.
func (s *Service) AddOnServiceInfo(ctx context.Context, addOnServiceIdentity string) (*AddOnService, error) {
var addOnService AddOnService
return &addOnService, s.Get(ctx, &addOnService, fmt.Sprintf("/addon-services/%v", addOnServiceIdentity), nil, nil)
}
type AddOnServiceListResult []AddOnService
// 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
Team *struct {
ID string `json:"id" url:"id,key"` // unique identifier of team
Name string `json:"name" url:"name,key"` // unique name of team
} `json:"team" url:"team,key"` // identity of team
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
}
// Create a new app.
func (s *Service) AppCreate(ctx context.Context, o AppCreateOpts) (*App, error) {
var app App
return &app, s.Post(ctx, &app, fmt.Sprintf("/apps"), o)
}
// Delete an existing app.
func (s *Service) AppDelete(ctx context.Context, appIdentity string) (*App, error) {
var app App
return &app, s.Delete(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity))
}
// Info for existing app.
func (s *Service) AppInfo(ctx context.Context, appIdentity string) (*App, error) {
var app App
return &app, s.Get(ctx, &app, fmt.Sprintf("/apps/%v", appIdentity), nil, nil)
}
type AppListResult []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 []App
// List owned and collaborated apps (excludes team 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
}
// Update an existing app.
func (s *Service) AppUpdate(ctx context.Context, appIdentity string, o AppUpdateOpts) (*App, error) {
var app App
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
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
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
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
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) (*AppFeature, error) {
var appFeature AppFeature
return &appFeature, s.Get(ctx, &appFeature, fmt.Sprintf("/apps/%v/features/%v", appIdentity, appFeatureIdentity), nil, nil)
}
type AppFeatureListResult []AppFeature
// 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
}
// Update an existing app feature.
func (s *Service) AppFeatureUpdate(ctx context.Context, appIdentity string, appFeatureIdentity string, o AppFeatureUpdateOpts) (*AppFeature, error) {
var appFeature AppFeature
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
}
// 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) (*AppSetup, error) {
var appSetup AppSetup
return &appSetup, s.Post(ctx, &appSetup, fmt.Sprintf("/app-setups"), o)
}
// Get the status of an app setup.
func (s *Service) AppSetupInfo(ctx context.Context, appSetupIdentity string) (*AppSetup, error) {
var appSetup AppSetup
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
}
// Create a new app transfer.
func (s *Service) AppTransferCreate(ctx context.Context, o AppTransferCreateOpts) (*AppTransfer, error) {
var appTransfer AppTransfer
return &appTransfer, s.Post(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers"), o)
}
// Delete an existing app transfer
func (s *Service) AppTransferDelete(ctx context.Context, appTransferIdentity string) (*AppTransfer, error) {
var appTransfer AppTransfer
return &appTransfer, s.Delete(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity))
}
// Info for existing app transfer.
func (s *Service) AppTransferInfo(ctx context.Context, appTransferIdentity string) (*AppTransfer, error) {
var appTransfer AppTransfer
return &appTransfer, s.Get(ctx, &appTransfer, fmt.Sprintf("/account/app-transfers/%v", appTransferIdentity), nil, nil)
}
type AppTransferListResult []AppTransfer
// 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
}
// Update an existing app transfer.
func (s *Service) AppTransferUpdate(ctx context.Context, appTransferIdentity string, o AppTransferUpdateOpts) (*AppTransfer, error) {
var appTransfer AppTransfer
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
}
// Create a new build.
func (s *Service) BuildCreate(ctx context.Context, appIdentity string, o BuildCreateOpts) (*Build, error) {
var build Build
return &build, s.Post(ctx, &build, fmt.Sprintf("/apps/%v/builds", appIdentity), o)
}
// Info for existing build.
func (s *Service) BuildInfo(ctx context.Context, appIdentity string, buildIdentity string) (*Build, error) {
var build Build
return &build, s.Get(ctx, &build, fmt.Sprintf("/apps/%v/builds/%v", appIdentity, buildIdentity), nil, nil)
}
type BuildListResult []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.
}
// Info for existing result.
func (s *Service) BuildResultInfo(ctx context.Context, appIdentity string, buildIdentity string) (*BuildResult, error) {
var buildResult BuildResult
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 []BuildpackInstallation
// 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 []BuildpackInstallation
// 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 team
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
}
// Create a new collaborator.
func (s *Service) CollaboratorCreate(ctx context.Context, appIdentity string, o CollaboratorCreateOpts) (*Collaborator, error) {
var collaborator Collaborator
return &collaborator, s.Post(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators", appIdentity), o)
}
// Delete an existing collaborator.
func (s *Service) CollaboratorDelete(ctx context.Context, appIdentity string, collaboratorIdentity string) (*Collaborator, error) {
var collaborator Collaborator
return &collaborator, s.Delete(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity))
}
// Info for existing collaborator.
func (s *Service) CollaboratorInfo(ctx context.Context, appIdentity string, collaboratorIdentity string) (*Collaborator, error) {
var collaborator Collaborator
return &collaborator, s.Get(ctx, &collaborator, fmt.Sprintf("/apps/%v/collaborators/%v", appIdentity, collaboratorIdentity), nil, nil)
}
type CollaboratorListResult []Collaborator
// 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
}
// Create a new credit.
func (s *Service) CreditCreate(ctx context.Context, o CreditCreateOpts) (*Credit, error) {
var credit Credit
return &credit, s.Post(ctx, &credit, fmt.Sprintf("/account/credits"), o)
}
// Info for existing credit.
func (s *Service) CreditInfo(ctx context.Context, creditIdentity string) (*Credit, error) {
var credit Credit
return &credit, s.Get(ctx, &credit, fmt.Sprintf("/account/credits/%v", creditIdentity), nil, nil)
}
type CreditListResult []Credit
// 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
}
// Create a new domain.
func (s *Service) DomainCreate(ctx context.Context, appIdentity string, o DomainCreateOpts) (*Domain, error) {
var domain Domain
return &domain, s.Post(ctx, &domain, fmt.Sprintf("/apps/%v/domains", appIdentity), o)
}
// Delete an existing domain
func (s *Service) DomainDelete(ctx context.Context, appIdentity string, domainIdentity string) (*Domain, error) {
var domain Domain
return &domain, s.Delete(ctx, &domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity))
}
// Info for existing domain.
func (s *Service) DomainInfo(ctx context.Context, appIdentity string, domainIdentity string) (*Domain, error) {
var domain Domain
return &domain, s.Get(ctx, &domain, fmt.Sprintf("/apps/%v/domains/%v", appIdentity, domainIdentity), nil, nil)
}
type DomainListResult []Domain
// 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
}
// Create a new dyno.
func (s *Service) DynoCreate(ctx context.Context, appIdentity string, o DynoCreateOpts) (*Dyno, error) {
var dyno Dyno
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)
}
// Info for existing dyno.
func (s *Service) DynoInfo(ctx context.Context, appIdentity string, dynoIdentity string) (*Dyno, error) {
var dyno Dyno
return &dyno, s.Get(ctx, &dyno, fmt.Sprintf("/apps/%v/dynos/%v", appIdentity, dynoIdentity), nil, nil)
}
type DynoListResult []Dyno
// 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
}
// Info for existing dyno size.
func (s *Service) DynoSizeInfo(ctx context.Context, dynoSizeIdentity string) (*DynoSize, error) {
var dynoSize DynoSize
return &dynoSize, s.Get(ctx, &dynoSize, fmt.Sprintf("/dyno-sizes/%v", dynoSizeIdentity), nil, nil)
}
type DynoSizeListResult []DynoSize
// 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 team 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
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
Team *struct {
Name string `json:"name" url:"name,key"` // unique name of team
} `json:"team" url:"team,key"` // team that owns this app
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
}
// Info for a process type
func (s *Service) FormationInfo(ctx context.Context, appIdentity string, formationIdentity string) (*Formation, error) {
var formation Formation
return &formation, s.Get(ctx, &formation, fmt.Sprintf("/apps/%v/formation/%v", appIdentity, formationIdentity), nil, nil)
}
type FormationListResult []Formation
// 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 []Formation
// 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")
}
// Update process type
func (s *Service) FormationUpdate(ctx context.Context, appIdentity string, formationIdentity string, o FormationUpdateOpts) (*Formation, error) {
var formation Formation
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 IdentityProviderListByOrganizationResult []IdentityProvider
// Get a list of an organization's Identity Providers
func (s *Service) IdentityProviderListByOrganization(ctx context.Context, organizationName string, lr *ListRange) (IdentityProviderListByOrganizationResult, error) {
var identityProvider IdentityProviderListByOrganizationResult
return identityProvider, s.Get(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers", organizationName), nil, lr)
}
type IdentityProviderCreateByOrganizationOpts 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
}
// Create an Identity Provider for an organization
func (s *Service) IdentityProviderCreateByOrganization(ctx context.Context, organizationName string, o IdentityProviderCreateByOrganizationOpts) (*IdentityProvider, error) {
var identityProvider IdentityProvider
return &identityProvider, s.Post(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers", organizationName), o)
}
type IdentityProviderUpdateByOrganizationOpts 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
}
// Update an organization's Identity Provider
func (s *Service) IdentityProviderUpdateByOrganization(ctx context.Context, organizationName string, identityProviderID string, o IdentityProviderUpdateByOrganizationOpts) (*IdentityProvider, error) {
var identityProvider IdentityProvider
return &identityProvider, s.Patch(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers/%v", organizationName, identityProviderID), o)
}
// Delete an organization's Identity Provider
func (s *Service) IdentityProviderDeleteByOrganization(ctx context.Context, organizationName string, identityProviderID string) (*IdentityProvider, error) {
var identityProvider IdentityProvider
return &identityProvider, s.Delete(ctx, &identityProvider, fmt.Sprintf("/organizations/%v/identity-providers/%v", organizationName, identityProviderID))
}
type IdentityProviderListByTeamResult []IdentityProvider
// Get a list of a team's Identity Providers
func (s *Service) IdentityProviderListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (IdentityProviderListByTeamResult, error) {
var identityProvider IdentityProviderListByTeamResult
return identityProvider, s.Get(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers", teamIdentity), nil, lr)
}
type IdentityProviderCreateByTeamOpts 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
}
// Create an Identity Provider for a team
func (s *Service) IdentityProviderCreateByTeam(ctx context.Context, teamIdentity string, o IdentityProviderCreateByTeamOpts) (*IdentityProvider, error) {
var identityProvider IdentityProvider
return &identityProvider, s.Post(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers", teamIdentity), o)
}
type IdentityProviderUpdateByTeamOpts 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
}
// Update a team's Identity Provider
func (s *Service) IdentityProviderUpdateByTeam(ctx context.Context, teamIdentity string, identityProviderID string, o IdentityProviderUpdateByTeamOpts) (*IdentityProvider, error) {
var identityProvider IdentityProvider
return &identityProvider, s.Patch(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers/%v", teamIdentity, identityProviderID), o)
}
// Delete a team's Identity Provider
func (s *Service) IdentityProviderDeleteByTeam(ctx context.Context, teamName string, identityProviderID string) (*IdentityProvider, error) {
var identityProvider IdentityProvider
return &identityProvider, s.Delete(ctx, &identityProvider, fmt.Sprintf("/teams/%v/identity-providers/%v", teamName, 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 requests source in CIDR notation
} `json:"rules" url:"rules,key"`
}
// Current inbound ruleset for a space
func (s *Service) InboundRulesetCurrent(ctx context.Context, spaceIdentity string) (*InboundRuleset, error) {
var inboundRuleset InboundRuleset
return &inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-ruleset", spaceIdentity), nil, nil)
}
// Info on an existing Inbound Ruleset
func (s *Service) InboundRulesetInfo(ctx context.Context, spaceIdentity string, inboundRulesetIdentity string) (*InboundRuleset, error) {
var inboundRuleset InboundRuleset
return &inboundRuleset, s.Get(ctx, &inboundRuleset, fmt.Sprintf("/spaces/%v/inbound-rulesets/%v", spaceIdentity, inboundRulesetIdentity), nil, nil)
}
type InboundRulesetListResult []InboundRuleset
// 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 requests 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
}
// Info for existing invoice.
func (s *Service) InvoiceInfo(ctx context.Context, invoiceIdentity int) (*Invoice, error) {
var invoice Invoice
return &invoice, s.Get(ctx, &invoice, fmt.Sprintf("/account/invoices/%v", invoiceIdentity), nil, nil)
}
type InvoiceListResult []Invoice
// 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
}
// Info for existing key.
func (s *Service) KeyInfo(ctx context.Context, keyIdentity string) (*Key, error) {
var key Key
return &key, s.Get(ctx, &key, fmt.Sprintf("/account/keys/%v", keyIdentity), nil, nil)
}
type KeyListResult []Key
// 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
}
// Create a new log drain.
func (s *Service) LogDrainCreate(ctx context.Context, appIdentity string, o LogDrainCreateOpts) (*LogDrain, error) {
var logDrain LogDrain
return &logDrain, s.Post(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains", appIdentity), o)
}
// 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) (*LogDrain, error) {
var logDrain LogDrain
return &logDrain, s.Delete(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainQueryIdentity))
}
// Info for existing log drain.
func (s *Service) LogDrainInfo(ctx context.Context, appIdentity string, logDrainQueryIdentity string) (*LogDrain, error) {
var logDrain LogDrain
return &logDrain, s.Get(ctx, &logDrain, fmt.Sprintf("/apps/%v/log-drains/%v", appIdentity, logDrainQueryIdentity), nil, nil)
}
type LogDrainListResult []LogDrain
// 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
}
// Create a new log session.
func (s *Service) LogSessionCreate(ctx context.Context, appIdentity string, o LogSessionCreateOpts) (*LogSession, error) {
var logSession LogSession
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
}
// Create a new OAuth authorization.
func (s *Service) OAuthAuthorizationCreate(ctx context.Context, o OAuthAuthorizationCreateOpts) (*OAuthAuthorization, error) {
var oauthAuthorization OAuthAuthorization
return &oauthAuthorization, s.Post(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations"), o)
}
// Delete OAuth authorization.
func (s *Service) OAuthAuthorizationDelete(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
var oauthAuthorization OAuthAuthorization
return &oauthAuthorization, s.Delete(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity))
}
// Info for an OAuth authorization.
func (s *Service) OAuthAuthorizationInfo(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
var oauthAuthorization OAuthAuthorization
return &oauthAuthorization, s.Get(ctx, &oauthAuthorization, fmt.Sprintf("/oauth/authorizations/%v", oauthAuthorizationIdentity), nil, nil)
}
type OAuthAuthorizationListResult []OAuthAuthorization
// 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)
}
// Regenerate OAuth tokens. This endpoint is only available to direct
// authorizations or privileged OAuth clients.
func (s *Service) OAuthAuthorizationRegenerate(ctx context.Context, oauthAuthorizationIdentity string) (*OAuthAuthorization, error) {
var oauthAuthorization OAuthAuthorization
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
}
// Create a new OAuth client.
func (s *Service) OAuthClientCreate(ctx context.Context, o OAuthClientCreateOpts) (*OAuthClient, error) {
var oauthClient OAuthClient
return &oauthClient, s.Post(ctx, &oauthClient, fmt.Sprintf("/oauth/clients"), o)
}
// Delete OAuth client.
func (s *Service) OAuthClientDelete(ctx context.Context, oauthClientIdentity string) (*OAuthClient, error) {
var oauthClient OAuthClient
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 []OAuthClient
// 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
}
// Update OAuth client
func (s *Service) OAuthClientUpdate(ctx context.Context, oauthClientIdentity string, o OAuthClientUpdateOpts) (*OAuthClient, error) {
var oauthClient OAuthClient
return &oauthClient, s.Patch(ctx, &oauthClient, fmt.Sprintf("/oauth/clients/%v", oauthClientIdentity), o)
}
// Rotate credentials for an OAuth client
func (s *Service) OAuthClientRotateCredentials(ctx context.Context, oauthClientIdentity string) (*OAuthClient, error) {
var oauthClient OAuthClient
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"`
}
// Create a new OAuth token.
func (s *Service) OAuthTokenCreate(ctx context.Context, o OAuthTokenCreateOpts) (*OAuthToken, error) {
var oauthToken OAuthToken
return &oauthToken, s.Post(ctx, &oauthToken, fmt.Sprintf("/oauth/tokens"), o)
}
// Revoke OAuth access token.
func (s *Service) OAuthTokenDelete(ctx context.Context, oauthTokenIdentity string) (*OAuthToken, error) {
var oauthToken OAuthToken
return &oauthToken, s.Delete(ctx, &oauthToken, fmt.Sprintf("/oauth/tokens/%v", oauthTokenIdentity))
}
// Deprecated: 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 []Organization
// 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
}
// Update organization properties.
func (s *Service) OrganizationUpdate(ctx context.Context, organizationIdentity string, o OrganizationUpdateOpts) (*Organization, error) {
var organization Organization
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
}
// Create a new organization.
func (s *Service) OrganizationCreate(ctx context.Context, o OrganizationCreateOpts) (*Organization, error) {
var organization Organization
return &organization, s.Post(ctx, &organization, fmt.Sprintf("/organizations"), o)
}
// Delete an existing organization.
func (s *Service) OrganizationDelete(ctx context.Context, organizationIdentity string) (*Organization, error) {
var organization Organization
return &organization, s.Delete(ctx, &organization, fmt.Sprintf("/organizations/%v", organizationIdentity))
}
// Deprecated: 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)
}
// Deprecated: 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 []OrganizationApp
// 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 []OrganizationApp
// 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.
}
// Lock or unlock an organization app.
func (s *Service) OrganizationAppUpdateLocked(ctx context.Context, organizationAppIdentity string, o OrganizationAppUpdateLockedOpts) (*OrganizationApp, error) {
var organizationApp OrganizationApp
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
}
// Transfer an existing organization app to another organization.
func (s *Service) OrganizationAppTransferToOrganization(ctx context.Context, organizationAppIdentity string, o OrganizationAppTransferToOrganizationOpts) (*OrganizationApp, error) {
var organizationApp OrganizationApp
return &organizationApp, s.Patch(ctx, &organizationApp, fmt.Sprintf("/organizations/apps/%v", organizationAppIdentity), o)
}
// Deprecated: 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 {
Permissions *[]*string `json:"permissions,omitempty" url:"permissions,omitempty,key"` // An array of permissions to give to the collaborator.
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
}
// 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) (*OrganizationAppCollaborator, error) {
var organizationAppCollaborator OrganizationAppCollaborator
return &organizationAppCollaborator, s.Post(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators", appIdentity), o)
}
// Delete an existing collaborator from an organization app.
func (s *Service) OrganizationAppCollaboratorDelete(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaborator, error) {
var organizationAppCollaborator OrganizationAppCollaborator
return &organizationAppCollaborator, s.Delete(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity))
}
// Info for a collaborator on an organization app.
func (s *Service) OrganizationAppCollaboratorInfo(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string) (*OrganizationAppCollaborator, error) {
var organizationAppCollaborator OrganizationAppCollaborator
return &organizationAppCollaborator, s.Get(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), nil, nil)
}
type OrganizationAppCollaboratorUpdateOpts struct {
Permissions []string `json:"permissions" url:"permissions,key"` // An array of permissions to give to the collaborator.
}
// Update an existing collaborator from an organization app.
func (s *Service) OrganizationAppCollaboratorUpdate(ctx context.Context, organizationAppIdentity string, organizationAppCollaboratorIdentity string, o OrganizationAppCollaboratorUpdateOpts) (*OrganizationAppCollaborator, error) {
var organizationAppCollaborator OrganizationAppCollaborator
return &organizationAppCollaborator, s.Patch(ctx, &organizationAppCollaborator, fmt.Sprintf("/organizations/apps/%v/collaborators/%v", organizationAppIdentity, organizationAppCollaboratorIdentity), o)
}
type OrganizationAppCollaboratorListResult []OrganizationAppCollaborator
// 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)
}
// Deprecated: 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 []OrganizationAppPermission
// 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)
}
// Deprecated: 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 organization feature was created
Description string `json:"description" url:"description,key"` // description of organization feature
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of organization feature
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not organization feature has been enabled
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
ID string `json:"id" url:"id,key"` // unique identifier of organization feature
Name string `json:"name" url:"name,key"` // unique name of organization feature
State string `json:"state" url:"state,key"` // state of organization feature
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when organization feature was updated
}
// Info for an existing organization feature.
func (s *Service) OrganizationFeatureInfo(ctx context.Context, organizationIdentity string, organizationFeatureIdentity string) (*OrganizationFeature, error) {
var organizationFeature OrganizationFeature
return &organizationFeature, s.Get(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features/%v", organizationIdentity, organizationFeatureIdentity), nil, nil)
}
type OrganizationFeatureListResult []OrganizationFeature
// 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)
}
type OrganizationFeatureUpdateOpts struct {
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not organization feature has been enabled
}
// Update an existing organization feature.
func (s *Service) OrganizationFeatureUpdate(ctx context.Context, organizationIdentity string, organizationFeatureIdentity string, o OrganizationFeatureUpdateOpts) (*OrganizationFeature, error) {
var organizationFeature OrganizationFeature
return &organizationFeature, s.Patch(ctx, &organizationFeature, fmt.Sprintf("/organizations/%v/features/%v", organizationIdentity, organizationFeatureIdentity), o)
}
// Deprecated: 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 []OrganizationInvitation
// 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))
}
// Get an invitation by its token
func (s *Service) OrganizationInvitationGet(ctx context.Context, organizationInvitationToken string, lr *ListRange) (*OrganizationInvitation, error) {
var organizationInvitation OrganizationInvitation
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)
}
// Deprecated: 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.
}
// Info for existing invoice.
func (s *Service) OrganizationInvoiceInfo(ctx context.Context, organizationIdentity string, organizationInvoiceIdentity int) (*OrganizationInvoice, error) {
var organizationInvoice OrganizationInvoice
return &organizationInvoice, s.Get(ctx, &organizationInvoice, fmt.Sprintf("/organizations/%v/invoices/%v", organizationIdentity, organizationInvoiceIdentity), nil, nil)
}
type OrganizationInvoiceListResult []OrganizationInvoice
// 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)
}
// Deprecated: 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
}
// Create a new organization member, or update their role.
func (s *Service) OrganizationMemberCreateOrUpdate(ctx context.Context, organizationIdentity string, o OrganizationMemberCreateOrUpdateOpts) (*OrganizationMember, error) {
var organizationMember OrganizationMember
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
}
// Create a new organization member.
func (s *Service) OrganizationMemberCreate(ctx context.Context, organizationIdentity string, o OrganizationMemberCreateOpts) (*OrganizationMember, error) {
var organizationMember OrganizationMember
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
}
// Update an organization member.
func (s *Service) OrganizationMemberUpdate(ctx context.Context, organizationIdentity string, o OrganizationMemberUpdateOpts) (*OrganizationMember, error) {
var organizationMember OrganizationMember
return &organizationMember, s.Patch(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members", organizationIdentity), o)
}
// Remove a member from the organization.
func (s *Service) OrganizationMemberDelete(ctx context.Context, organizationIdentity string, organizationMemberIdentity string) (*OrganizationMember, error) {
var organizationMember OrganizationMember
return &organizationMember, s.Delete(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members/%v", organizationIdentity, organizationMemberIdentity))
}
type OrganizationMemberListResult []OrganizationMember
// 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)
}
type OrganizationMemberAppListResult []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 the apps of a member.
func (s *Service) OrganizationMemberAppList(ctx context.Context, organizationIdentity string, organizationMemberIdentity string, lr *ListRange) (OrganizationMemberAppListResult, error) {
var organizationMember OrganizationMemberAppListResult
return organizationMember, s.Get(ctx, &organizationMember, fmt.Sprintf("/organizations/%v/members/%v/apps", organizationIdentity, organizationMemberIdentity), nil, lr)
}
// Deprecated: 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
}
// Retrieve Organization Preferences
func (s *Service) OrganizationPreferencesList(ctx context.Context, organizationPreferencesIdentity string) (*OrganizationPreferences, error) {
var organizationPreferences OrganizationPreferences
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
}
// Update Organization Preferences
func (s *Service) OrganizationPreferencesUpdate(ctx context.Context, organizationPreferencesIdentity string, o OrganizationPreferencesUpdateOpts) (*OrganizationPreferences, error) {
var organizationPreferences OrganizationPreferences
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"`
}
// Current outbound ruleset for a space
func (s *Service) OutboundRulesetCurrent(ctx context.Context, spaceIdentity string) (*OutboundRuleset, error) {
var outboundRuleset OutboundRuleset
return &outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-ruleset", spaceIdentity), nil, nil)
}
// Info on an existing Outbound Ruleset
func (s *Service) OutboundRulesetInfo(ctx context.Context, spaceIdentity string, outboundRulesetIdentity string) (*OutboundRuleset, error) {
var outboundRuleset OutboundRuleset
return &outboundRuleset, s.Get(ctx, &outboundRuleset, fmt.Sprintf("/spaces/%v/outbound-rulesets/%v", spaceIdentity, outboundRulesetIdentity), nil, nil)
}
type OutboundRulesetListResult []OutboundRuleset
// 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
}
// Create a new pipeline.
func (s *Service) PipelineCreate(ctx context.Context, o PipelineCreateOpts) (*Pipeline, error) {
var pipeline Pipeline
return &pipeline, s.Post(ctx, &pipeline, fmt.Sprintf("/pipelines"), o)
}
// Info for existing pipeline.
func (s *Service) PipelineInfo(ctx context.Context, pipelineIdentity string) (*Pipeline, error) {
var pipeline Pipeline
return &pipeline, s.Get(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineIdentity), nil, nil)
}
// Delete an existing pipeline.
func (s *Service) PipelineDelete(ctx context.Context, pipelineID string) (*Pipeline, error) {
var pipeline Pipeline
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
}
// Update an existing pipeline.
func (s *Service) PipelineUpdate(ctx context.Context, pipelineID string, o PipelineUpdateOpts) (*Pipeline, error) {
var pipeline Pipeline
return &pipeline, s.Patch(ctx, &pipeline, fmt.Sprintf("/pipelines/%v", pipelineID), o)
}
type PipelineListResult []Pipeline
// 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 PipelineCouplingListByPipelineResult []PipelineCoupling
// List couplings for a pipeline
func (s *Service) PipelineCouplingListByPipeline(ctx context.Context, pipelineID string, lr *ListRange) (PipelineCouplingListByPipelineResult, error) {
var pipelineCoupling PipelineCouplingListByPipelineResult
return pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipelines/%v/pipeline-couplings", pipelineID), nil, lr)
}
type PipelineCouplingListResult []PipelineCoupling
// List pipeline couplings.
func (s *Service) PipelineCouplingList(ctx context.Context, lr *ListRange) (PipelineCouplingListResult, error) {
var pipelineCoupling PipelineCouplingListResult
return pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings"), 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
}
// Create a new pipeline coupling.
func (s *Service) PipelineCouplingCreate(ctx context.Context, o PipelineCouplingCreateOpts) (*PipelineCoupling, error) {
var pipelineCoupling PipelineCoupling
return &pipelineCoupling, s.Post(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings"), o)
}
// Info for an existing pipeline coupling.
func (s *Service) PipelineCouplingInfo(ctx context.Context, pipelineCouplingIdentity string) (*PipelineCoupling, error) {
var pipelineCoupling PipelineCoupling
return &pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity), nil, nil)
}
// Delete an existing pipeline coupling.
func (s *Service) PipelineCouplingDelete(ctx context.Context, pipelineCouplingIdentity string) (*PipelineCoupling, error) {
var pipelineCoupling PipelineCoupling
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
}
// Update an existing pipeline coupling.
func (s *Service) PipelineCouplingUpdate(ctx context.Context, pipelineCouplingIdentity string, o PipelineCouplingUpdateOpts) (*PipelineCoupling, error) {
var pipelineCoupling PipelineCoupling
return &pipelineCoupling, s.Patch(ctx, &pipelineCoupling, fmt.Sprintf("/pipeline-couplings/%v", pipelineCouplingIdentity), o)
}
// Info for an existing app pipeline coupling.
func (s *Service) PipelineCouplingInfoByApp(ctx context.Context, appIdentity string) (*PipelineCoupling, error) {
var pipelineCoupling PipelineCoupling
return &pipelineCoupling, s.Get(ctx, &pipelineCoupling, fmt.Sprintf("/apps/%v/pipeline-couplings", appIdentity), nil, nil)
}
// 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)
}
// Info for existing pipeline promotion.
func (s *Service) PipelinePromotionInfo(ctx context.Context, pipelinePromotionIdentity string) (*PipelinePromotion, error) {
var pipelinePromotion PipelinePromotion
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 []PipelinePromotionTarget
// 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
}
// Info for existing plan.
func (s *Service) PlanInfo(ctx context.Context, planIdentity string) (*Plan, error) {
var plan Plan
return &plan, s.Get(ctx, &plan, fmt.Sprintf("/plans/%v", planIdentity), nil, nil)
}
// Info for existing plan by Add-on.
func (s *Service) PlanInfoByAddOn(ctx context.Context, addOnServiceIdentity string, planIdentity string) (*Plan, error) {
var plan Plan
return &plan, s.Get(ctx, &plan, fmt.Sprintf("/addon-services/%v/plans/%v", addOnServiceIdentity, planIdentity), nil, nil)
}
type PlanListByAddOnResult []Plan
// List existing plans by Add-on.
func (s *Service) PlanListByAddOn(ctx context.Context, addOnServiceIdentity string, lr *ListRange) (PlanListByAddOnResult, error) {
var plan PlanListByAddOnResult
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
}
// Info for rate limits.
func (s *Service) RateLimitInfo(ctx context.Context) (*RateLimit, error) {
var rateLimit RateLimit
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
}
// Info for existing region.
func (s *Service) RegionInfo(ctx context.Context, regionIdentity string) (*Region, error) {
var region Region
return &region, s.Get(ctx, &region, fmt.Sprintf("/regions/%v", regionIdentity), nil, nil)
}
type RegionListResult []Region
// List existing regions.
func (s *Service) RegionList(ctx context.Context, lr *ListRange) (RegionListResult, error) {
var region RegionListResult
return region, s.Get(ctx, &region, 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
}
// Info for existing release.
func (s *Service) ReleaseInfo(ctx context.Context, appIdentity string, releaseIdentity string) (*Release, error) {
var release Release
return &release, s.Get(ctx, &release, fmt.Sprintf("/apps/%v/releases/%v", appIdentity, releaseIdentity), nil, nil)
}
type ReleaseListResult []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
}
// Create new release.
func (s *Service) ReleaseCreate(ctx context.Context, appIdentity string, o ReleaseCreateOpts) (*Release, error) {
var release Release
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
}
// Rollback to an existing release.
func (s *Service) ReleaseRollback(ctx context.Context, appIdentity string, o ReleaseRollbackOpts) (*Release, error) {
var release Release
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
}
// Info for existing slug.
func (s *Service) SlugInfo(ctx context.Context, appIdentity string, slugIdentity string) (*Slug, error) {
var slug Slug
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
}
// 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) (*Slug, error) {
var slug Slug
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
}
// Recover an account using an SMS recovery code
func (s *Service) SmsNumberSMSNumber(ctx context.Context, accountIdentity string) (*SmsNumber, error) {
var smsNumber SmsNumber
return &smsNumber, s.Get(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number", accountIdentity), nil, nil)
}
// Recover an account using an SMS recovery code
func (s *Service) SmsNumberRecover(ctx context.Context, accountIdentity string) (*SmsNumber, error) {
var smsNumber SmsNumber
return &smsNumber, s.Post(ctx, &smsNumber, fmt.Sprintf("/users/%v/sms-number/actions/recover", accountIdentity), nil)
}
// Confirm an SMS number change with a confirmation code
func (s *Service) SmsNumberConfirm(ctx context.Context, accountIdentity string) (*SmsNumber, error) {
var smsNumber SmsNumber
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)
}
// Create a new SNI endpoint.
func (s *Service) SniEndpointCreate(ctx context.Context, appIdentity string, o SniEndpointCreateOpts) (*SniEndpoint, error) {
var sniEndpoint SniEndpoint
return &sniEndpoint, s.Post(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints", appIdentity), o)
}
// Delete existing SNI endpoint.
func (s *Service) SniEndpointDelete(ctx context.Context, appIdentity string, sniEndpointIdentity string) (*SniEndpoint, error) {
var sniEndpoint SniEndpoint
return &sniEndpoint, s.Delete(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity))
}
// Info for existing SNI endpoint.
func (s *Service) SniEndpointInfo(ctx context.Context, appIdentity string, sniEndpointIdentity string) (*SniEndpoint, error) {
var sniEndpoint SniEndpoint
return &sniEndpoint, s.Get(ctx, &sniEndpoint, fmt.Sprintf("/apps/%v/sni-endpoints/%v", appIdentity, sniEndpointIdentity), nil, nil)
}
type SniEndpointListResult []SniEndpoint
// 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)
}
// Update an existing SNI endpoint.
func (s *Service) SniEndpointUpdate(ctx context.Context, appIdentity string, sniEndpointIdentity string, o SniEndpointUpdateOpts) (*SniEndpoint, error) {
var sniEndpoint SniEndpoint
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
}
// Create URLs for uploading and downloading source.
func (s *Service) SourceCreate(ctx context.Context) (*Source, error) {
var source Source
return &source, s.Post(ctx, &source, fmt.Sprintf("/sources"), nil)
}
// Create URLs for uploading and downloading source. Deprecated in favor
// of `POST /sources`
func (s *Service) SourceCreateDeprecated(ctx context.Context, appIdentity string) (*Source, error) {
var source Source
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
Team struct {
ID string `json:"id" url:"id,key"` // unique identifier of team
Name string `json:"name" url:"name,key"` // unique name of team
} `json:"team" url:"team,key"` // team that owns this space
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when space was updated
}
type SpaceListResult []Space
// 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)
}
// Info for existing space.
func (s *Service) SpaceInfo(ctx context.Context, spaceIdentity string) (*Space, error) {
var space Space
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
}
// Update an existing space.
func (s *Service) SpaceUpdate(ctx context.Context, spaceIdentity string, o SpaceUpdateOpts) (*Space, error) {
var space Space
return &space, s.Patch(ctx, &space, fmt.Sprintf("/spaces/%v", spaceIdentity), o)
}
// Delete an existing space.
func (s *Service) SpaceDelete(ctx context.Context, spaceIdentity string) (*Space, error) {
var space Space
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
}
// Create a new space.
func (s *Service) SpaceCreate(ctx context.Context, o SpaceCreateOpts) (*Space, error) {
var space Space
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
}
// List permissions for a given user on a given space.
func (s *Service) SpaceAppAccessInfo(ctx context.Context, spaceIdentity string, accountIdentity string) (*SpaceAppAccess, error) {
var spaceAppAccess SpaceAppAccess
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"`
}
// Update an existing user's set of permissions on a space.
func (s *Service) SpaceAppAccessUpdate(ctx context.Context, spaceIdentity string, accountIdentity string, o SpaceAppAccessUpdateOpts) (*SpaceAppAccess, error) {
var spaceAppAccess SpaceAppAccess
return &spaceAppAccess, s.Patch(ctx, &spaceAppAccess, fmt.Sprintf("/spaces/%v/members/%v", spaceIdentity, accountIdentity), o)
}
type SpaceAppAccessListResult []SpaceAppAccess
// 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
}
// Current state of network address translation for a space.
func (s *Service) SpaceNatInfo(ctx context.Context, spaceIdentity string) (*SpaceNat, error) {
var spaceNat SpaceNat
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)
}
// Create a new SSL endpoint.
func (s *Service) SSLEndpointCreate(ctx context.Context, appIdentity string, o SSLEndpointCreateOpts) (*SSLEndpoint, error) {
var sslEndpoint SSLEndpoint
return &sslEndpoint, s.Post(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints", appIdentity), o)
}
// Delete existing SSL endpoint.
func (s *Service) SSLEndpointDelete(ctx context.Context, appIdentity string, sslEndpointIdentity string) (*SSLEndpoint, error) {
var sslEndpoint SSLEndpoint
return &sslEndpoint, s.Delete(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity))
}
// Info for existing SSL endpoint.
func (s *Service) SSLEndpointInfo(ctx context.Context, appIdentity string, sslEndpointIdentity string) (*SSLEndpoint, error) {
var sslEndpoint SSLEndpoint
return &sslEndpoint, s.Get(ctx, &sslEndpoint, fmt.Sprintf("/apps/%v/ssl-endpoints/%v", appIdentity, sslEndpointIdentity), nil, nil)
}
type SSLEndpointListResult []SSLEndpoint
// 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
}
// Update an existing SSL endpoint.
func (s *Service) SSLEndpointUpdate(ctx context.Context, appIdentity string, sslEndpointIdentity string, o SSLEndpointUpdateOpts) (*SSLEndpoint, error) {
var sslEndpoint SSLEndpoint
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
}
// Stack info.
func (s *Service) StackInfo(ctx context.Context, stackIdentity string) (*Stack, error) {
var stack Stack
return &stack, s.Get(ctx, &stack, fmt.Sprintf("/stacks/%v", stackIdentity), nil, nil)
}
type StackListResult []Stack
// 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)
}
// Teams allow you to manage access to a shared group of applications
// and other resources.
type Team struct {
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when the team was created
CreditCardCollections bool `json:"credit_card_collections" url:"credit_card_collections,key"` // whether charges incurred by the team are paid by credit card.
Default bool `json:"default" url:"default,key"` // whether to use this team when none is specified
ID string `json:"id" url:"id,key"` // unique identifier of team
MembershipLimit *float64 `json:"membership_limit" url:"membership_limit,key"` // upper limit of members allowed in a team.
Name string `json:"name" url:"name,key"` // unique name of team
ProvisionedLicenses bool `json:"provisioned_licenses" url:"provisioned_licenses,key"` // whether the team is provisioned licenses by salesforce.
Role *string `json:"role" url:"role,key"` // role in the team
Type string `json:"type" url:"type,key"` // type of team.
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when the team was updated
}
type TeamListResult []Team
// List teams in which you are a member.
func (s *Service) TeamList(ctx context.Context, lr *ListRange) (TeamListResult, error) {
var team TeamListResult
return team, s.Get(ctx, &team, fmt.Sprintf("/teams"), nil, lr)
}
// Info for a team.
func (s *Service) TeamInfo(ctx context.Context, teamIdentity string) (*Team, error) {
var team Team
return &team, s.Get(ctx, &team, fmt.Sprintf("/teams/%v", teamIdentity), nil, nil)
}
type TeamUpdateOpts struct {
Default *bool `json:"default,omitempty" url:"default,omitempty,key"` // whether to use this team when none is specified
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of team
}
// Update team properties.
func (s *Service) TeamUpdate(ctx context.Context, teamIdentity string, o TeamUpdateOpts) (*Team, error) {
var team Team
return &team, s.Patch(ctx, &team, fmt.Sprintf("/teams/%v", teamIdentity), o)
}
type TeamCreateOpts 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 team
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
}
// Create a new team.
func (s *Service) TeamCreate(ctx context.Context, o TeamCreateOpts) (*Team, error) {
var team Team
return &team, s.Post(ctx, &team, fmt.Sprintf("/teams"), o)
}
// Delete an existing team.
func (s *Service) TeamDelete(ctx context.Context, teamIdentity string) (*Team, error) {
var team Team
return &team, s.Delete(ctx, &team, fmt.Sprintf("/teams/%v", teamIdentity))
}
// An team app encapsulates the team specific functionality of Heroku
// apps.
type TeamApp 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 team 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
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
Team *struct {
Name string `json:"name" url:"name,key"` // unique name of team
} `json:"team" url:"team,key"` // team that owns this app
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 TeamAppCreateOpts struct {
Locked *bool `json:"locked,omitempty" url:"locked,omitempty,key"` // are other team members forbidden from joining this app.
Name *string `json:"name,omitempty" url:"name,omitempty,key"` // unique name of app
Personal *bool `json:"personal,omitempty" url:"personal,omitempty,key"` // force creation of the app in the user account even if a default team
// 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
Team *string `json:"team,omitempty" url:"team,omitempty,key"` // unique name of team
}
// Create a new app in the specified team, in the default team if
// unspecified, or in personal account, if default team is not set.
func (s *Service) TeamAppCreate(ctx context.Context, o TeamAppCreateOpts) (*TeamApp, error) {
var teamApp TeamApp
return &teamApp, s.Post(ctx, &teamApp, fmt.Sprintf("/teams/apps"), o)
}
type TeamAppListResult []TeamApp
// List apps in the default team, or in personal account, if default
// team is not set.
func (s *Service) TeamAppList(ctx context.Context, lr *ListRange) (TeamAppListResult, error) {
var teamApp TeamAppListResult
return teamApp, s.Get(ctx, &teamApp, fmt.Sprintf("/teams/apps"), nil, lr)
}
// Info for a team app.
func (s *Service) TeamAppInfo(ctx context.Context, teamAppIdentity string) (*TeamApp, error) {
var teamApp TeamApp
return &teamApp, s.Get(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), nil, nil)
}
type TeamAppUpdateLockedOpts struct {
Locked bool `json:"locked" url:"locked,key"` // are other team members forbidden from joining this app.
}
// Lock or unlock a team app.
func (s *Service) TeamAppUpdateLocked(ctx context.Context, teamAppIdentity string, o TeamAppUpdateLockedOpts) (*TeamApp, error) {
var teamApp TeamApp
return &teamApp, s.Patch(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), o)
}
type TeamAppTransferToAccountOpts struct {
Owner string `json:"owner" url:"owner,key"` // unique email address of account
}
// Transfer an existing team app to another Heroku account.
func (s *Service) TeamAppTransferToAccount(ctx context.Context, teamAppIdentity string, o TeamAppTransferToAccountOpts) (*TeamApp, error) {
var teamApp TeamApp
return &teamApp, s.Patch(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), o)
}
type TeamAppTransferToTeamOpts struct {
Owner string `json:"owner" url:"owner,key"` // unique name of team
}
// Transfer an existing team app to another team.
func (s *Service) TeamAppTransferToTeam(ctx context.Context, teamAppIdentity string, o TeamAppTransferToTeamOpts) (*TeamApp, error) {
var teamApp TeamApp
return &teamApp, s.Patch(ctx, &teamApp, fmt.Sprintf("/teams/apps/%v", teamAppIdentity), o)
}
type TeamAppListByTeamResult []TeamApp
// List team apps.
func (s *Service) TeamAppListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (TeamAppListByTeamResult, error) {
var teamApp TeamAppListByTeamResult
return teamApp, s.Get(ctx, &teamApp, fmt.Sprintf("/teams/%v/apps", teamIdentity), nil, lr)
}
// A team collaborator represents an account that has been given access
// to a team app on Heroku.
type TeamAppCollaborator 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 team
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 TeamAppCollaboratorCreateOpts struct {
Permissions *[]*string `json:"permissions,omitempty" url:"permissions,omitempty,key"` // An array of permissions to give to the collaborator.
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
}
// Create a new collaborator on a team 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 team.
func (s *Service) TeamAppCollaboratorCreate(ctx context.Context, appIdentity string, o TeamAppCollaboratorCreateOpts) (*TeamAppCollaborator, error) {
var teamAppCollaborator TeamAppCollaborator
return &teamAppCollaborator, s.Post(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators", appIdentity), o)
}
// Delete an existing collaborator from a team app.
func (s *Service) TeamAppCollaboratorDelete(ctx context.Context, teamAppIdentity string, teamAppCollaboratorIdentity string) (*TeamAppCollaborator, error) {
var teamAppCollaborator TeamAppCollaborator
return &teamAppCollaborator, s.Delete(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators/%v", teamAppIdentity, teamAppCollaboratorIdentity))
}
// Info for a collaborator on a team app.
func (s *Service) TeamAppCollaboratorInfo(ctx context.Context, teamAppIdentity string, teamAppCollaboratorIdentity string) (*TeamAppCollaborator, error) {
var teamAppCollaborator TeamAppCollaborator
return &teamAppCollaborator, s.Get(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators/%v", teamAppIdentity, teamAppCollaboratorIdentity), nil, nil)
}
type TeamAppCollaboratorUpdateOpts struct {
Permissions []string `json:"permissions" url:"permissions,key"` // An array of permissions to give to the collaborator.
}
// Update an existing collaborator from a team app.
func (s *Service) TeamAppCollaboratorUpdate(ctx context.Context, teamAppIdentity string, teamAppCollaboratorIdentity string, o TeamAppCollaboratorUpdateOpts) (*TeamAppCollaborator, error) {
var teamAppCollaborator TeamAppCollaborator
return &teamAppCollaborator, s.Patch(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators/%v", teamAppIdentity, teamAppCollaboratorIdentity), o)
}
type TeamAppCollaboratorListResult []TeamAppCollaborator
// List collaborators on a team app.
func (s *Service) TeamAppCollaboratorList(ctx context.Context, teamAppIdentity string, lr *ListRange) (TeamAppCollaboratorListResult, error) {
var teamAppCollaborator TeamAppCollaboratorListResult
return teamAppCollaborator, s.Get(ctx, &teamAppCollaborator, fmt.Sprintf("/teams/apps/%v/collaborators", teamAppIdentity), nil, lr)
}
// A team app permission is a behavior that is assigned to a user in a
// team app.
type TeamAppPermission 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 TeamAppPermissionListResult []TeamAppPermission
// Lists permissions available to teams.
func (s *Service) TeamAppPermissionList(ctx context.Context, lr *ListRange) (TeamAppPermissionListResult, error) {
var teamAppPermission TeamAppPermissionListResult
return teamAppPermission, s.Get(ctx, &teamAppPermission, fmt.Sprintf("/teams/permissions"), nil, lr)
}
// A team feature represents a feature enabled on a team account.
type TeamFeature struct {
CreatedAt time.Time `json:"created_at" url:"created_at,key"` // when team feature was created
Description string `json:"description" url:"description,key"` // description of team feature
DisplayName string `json:"display_name" url:"display_name,key"` // user readable feature name
DocURL string `json:"doc_url" url:"doc_url,key"` // documentation URL of team feature
Enabled bool `json:"enabled" url:"enabled,key"` // whether or not team feature has been enabled
FeedbackEmail string `json:"feedback_email" url:"feedback_email,key"` // e-mail to send feedback about the feature
ID string `json:"id" url:"id,key"` // unique identifier of team feature
Name string `json:"name" url:"name,key"` // unique name of team feature
State string `json:"state" url:"state,key"` // state of team feature
UpdatedAt time.Time `json:"updated_at" url:"updated_at,key"` // when team feature was updated
}
// Info for an existing team feature.
func (s *Service) TeamFeatureInfo(ctx context.Context, teamIdentity string, teamFeatureIdentity string) (*TeamFeature, error) {
var teamFeature TeamFeature
return &teamFeature, s.Get(ctx, &teamFeature, fmt.Sprintf("/teams/%v/features/%v", teamIdentity, teamFeatureIdentity), nil, nil)
}
type TeamFeatureListResult []TeamFeature
// List existing team features.
func (s *Service) TeamFeatureList(ctx context.Context, teamIdentity string, lr *ListRange) (TeamFeatureListResult, error) {
var teamFeature TeamFeatureListResult
return teamFeature, s.Get(ctx, &teamFeature, fmt.Sprintf("/teams/%v/features", teamIdentity), nil, lr)
}
// A team invitation represents an invite to a team.
type TeamInvitation 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"`
Role *string `json:"role" url:"role,key"` // role in the team
Team struct {
ID string `json:"id" url:"id,key"` // unique identifier of team
Name string `json:"name" url:"name,key"` // unique name of team
} `json:"team" url:"team,key"`
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 TeamInvitationListResult []TeamInvitation
// Get a list of a team's Identity Providers
func (s *Service) TeamInvitationList(ctx context.Context, teamName string, lr *ListRange) (TeamInvitationListResult, error) {
var teamInvitation TeamInvitationListResult
return teamInvitation, s.Get(ctx, &teamInvitation, fmt.Sprintf("/teams/%v/invitations", teamName), nil, lr)
}
type TeamInvitationCreateOpts struct {
Email string `json:"email" url:"email,key"` // unique email address of account
Role *string `json:"role" url:"role,key"` // role in the team
}
// Create Team Invitation
func (s *Service) TeamInvitationCreate(ctx context.Context, teamIdentity string, o TeamInvitationCreateOpts) (*TeamInvitation, error) {
var teamInvitation TeamInvitation
return &teamInvitation, s.Put(ctx, &teamInvitation, fmt.Sprintf("/teams/%v/invitations", teamIdentity), o)
}
// Revoke a team invitation.
func (s *Service) TeamInvitationRevoke(ctx context.Context, teamIdentity string, teamInvitationIdentity string) (*TeamInvitation, error) {
var teamInvitation TeamInvitation
return &teamInvitation, s.Delete(ctx, &teamInvitation, fmt.Sprintf("/teams/%v/invitations/%v", teamIdentity, teamInvitationIdentity))
}
// Get an invitation by its token
func (s *Service) TeamInvitationGet(ctx context.Context, teamInvitationToken string, lr *ListRange) (*TeamInvitation, error) {
var teamInvitation TeamInvitation
return &teamInvitation, s.Get(ctx, &teamInvitation, fmt.Sprintf("/teams/invitations/%v", teamInvitationToken), nil, lr)
}
type TeamInvitationAcceptResult 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 team 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 the team member
Role *string `json:"role" url:"role,key"` // role in the team
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise team 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 Team Invitation
func (s *Service) TeamInvitationAccept(ctx context.Context, teamInvitationToken string) (*TeamInvitationAcceptResult, error) {
var teamInvitation TeamInvitationAcceptResult
return &teamInvitation, s.Post(ctx, &teamInvitation, fmt.Sprintf("/teams/invitations/%v/accept", teamInvitationToken), nil)
}
// A Team Invoice is an itemized bill of goods for a team which includes
// pricing and charges.
type TeamInvoice 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"` // 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) TeamInvoiceInfo(ctx context.Context, teamIdentity string, teamInvoiceIdentity int) (*TeamInvoice, error) {
var teamInvoice TeamInvoice
return &teamInvoice, s.Get(ctx, &teamInvoice, fmt.Sprintf("/teams/%v/invoices/%v", teamIdentity, teamInvoiceIdentity), nil, nil)
}
type TeamInvoiceListResult []TeamInvoice
// List existing invoices.
func (s *Service) TeamInvoiceList(ctx context.Context, teamIdentity string, lr *ListRange) (TeamInvoiceListResult, error) {
var teamInvoice TeamInvoiceListResult
return teamInvoice, s.Get(ctx, &teamInvoice, fmt.Sprintf("/teams/%v/invoices", teamIdentity), nil, lr)
}
// A team member is an individual with access to a team.
type TeamMember 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 team 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 the team member
Role *string `json:"role" url:"role,key"` // role in the team
TwoFactorAuthentication bool `json:"two_factor_authentication" url:"two_factor_authentication,key"` // whether the Enterprise team 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 TeamMemberCreateOrUpdateOpts struct {
Email string `json:"email" url:"email,key"` // email address of the team 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 team
}
// Create a new team member, or update their role.
func (s *Service) TeamMemberCreateOrUpdate(ctx context.Context, teamIdentity string, o TeamMemberCreateOrUpdateOpts) (*TeamMember, error) {
var teamMember TeamMember
return &teamMember, s.Put(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), o)
}
type TeamMemberCreateOpts struct {
Email string `json:"email" url:"email,key"` // email address of the team 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 team
}
// Create a new team member.
func (s *Service) TeamMemberCreate(ctx context.Context, teamIdentity string, o TeamMemberCreateOpts) (*TeamMember, error) {
var teamMember TeamMember
return &teamMember, s.Post(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), o)
}
type TeamMemberUpdateOpts struct {
Email string `json:"email" url:"email,key"` // email address of the team 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 team
}
// Update a team member.
func (s *Service) TeamMemberUpdate(ctx context.Context, teamIdentity string, o TeamMemberUpdateOpts) (*TeamMember, error) {
var teamMember TeamMember
return &teamMember, s.Patch(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), o)
}
// Remove a member from the team.
func (s *Service) TeamMemberDelete(ctx context.Context, teamIdentity string, teamMemberIdentity string) (*TeamMember, error) {
var teamMember TeamMember
return &teamMember, s.Delete(ctx, &teamMember, fmt.Sprintf("/teams/%v/members/%v", teamIdentity, teamMemberIdentity))
}
type TeamMemberListResult []TeamMember
// List members of the team.
func (s *Service) TeamMemberList(ctx context.Context, teamIdentity string, lr *ListRange) (TeamMemberListResult, error) {
var teamMember TeamMemberListResult
return teamMember, s.Get(ctx, &teamMember, fmt.Sprintf("/teams/%v/members", teamIdentity), nil, lr)
}
type TeamMemberListByMemberResult []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 team 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
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
Team *struct {
Name string `json:"name" url:"name,key"` // unique name of team
} `json:"team" url:"team,key"` // team that owns this app
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 the apps of a team member.
func (s *Service) TeamMemberListByMember(ctx context.Context, teamIdentity string, teamMemberIdentity string, lr *ListRange) (TeamMemberListByMemberResult, error) {
var teamMember TeamMemberListByMemberResult
return teamMember, s.Get(ctx, &teamMember, fmt.Sprintf("/teams/%v/members/%v/apps", teamIdentity, teamMemberIdentity), nil, lr)
}
// Tracks a Team's Preferences
type TeamPreferences struct {
DefaultPermission *string `json:"default-permission" url:"default-permission,key"` // The default permission used when adding new members to the team
WhitelistingEnabled *bool `json:"whitelisting-enabled" url:"whitelisting-enabled,key"` // Whether whitelisting rules should be applied to add-on installations
}
// Retrieve Team Preferences
func (s *Service) TeamPreferencesList(ctx context.Context, teamPreferencesIdentity string) (*TeamPreferences, error) {
var teamPreferences TeamPreferences
return &teamPreferences, s.Get(ctx, &teamPreferences, fmt.Sprintf("/teams/%v/preferences", teamPreferencesIdentity), nil, nil)
}
type TeamPreferencesUpdateOpts struct {
WhitelistingEnabled *bool `json:"whitelisting-enabled,omitempty" url:"whitelisting-enabled,omitempty,key"` // Whether whitelisting rules should be applied to add-on installations
}
// Update Team Preferences
func (s *Service) TeamPreferencesUpdate(ctx context.Context, teamPreferencesIdentity string, o TeamPreferencesUpdateOpts) (*TeamPreferences, error) {
var teamPreferences TeamPreferences
return &teamPreferences, s.Patch(ctx, &teamPreferences, fmt.Sprintf("/teams/%v/preferences", teamPreferencesIdentity), o)
}
// 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
}
// Retrieve User Preferences
func (s *Service) UserPreferencesList(ctx context.Context, userPreferencesIdentity string) (*UserPreferences, error) {
var userPreferences UserPreferences
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
}
// Update User Preferences
func (s *Service) UserPreferencesUpdate(ctx context.Context, userPreferencesIdentity string, o UserPreferencesUpdateOpts) (*UserPreferences, error) {
var userPreferences UserPreferences
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 WhitelistedAddOnServiceListByOrganizationResult []WhitelistedAddOnService
// List all whitelisted Add-on Services for an Organization
func (s *Service) WhitelistedAddOnServiceListByOrganization(ctx context.Context, organizationIdentity string, lr *ListRange) (WhitelistedAddOnServiceListByOrganizationResult, error) {
var whitelistedAddOnService WhitelistedAddOnServiceListByOrganizationResult
return whitelistedAddOnService, s.Get(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services", organizationIdentity), nil, lr)
}
type WhitelistedAddOnServiceCreateByOrganizationOpts struct {
AddonService *string `json:"addon_service,omitempty" url:"addon_service,omitempty,key"` // name of the Add-on to whitelist
}
type WhitelistedAddOnServiceCreateByOrganizationResult []WhitelistedAddOnService
// Whitelist an Add-on Service
func (s *Service) WhitelistedAddOnServiceCreateByOrganization(ctx context.Context, organizationIdentity string, o WhitelistedAddOnServiceCreateByOrganizationOpts) (WhitelistedAddOnServiceCreateByOrganizationResult, error) {
var whitelistedAddOnService WhitelistedAddOnServiceCreateByOrganizationResult
return whitelistedAddOnService, s.Post(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services", organizationIdentity), o)
}
// Remove a whitelisted entity
func (s *Service) WhitelistedAddOnServiceDeleteByOrganization(ctx context.Context, organizationIdentity string, whitelistedAddOnServiceIdentity string) (*WhitelistedAddOnService, error) {
var whitelistedAddOnService WhitelistedAddOnService
return &whitelistedAddOnService, s.Delete(ctx, &whitelistedAddOnService, fmt.Sprintf("/organizations/%v/whitelisted-addon-services/%v", organizationIdentity, whitelistedAddOnServiceIdentity))
}
type WhitelistedAddOnServiceListByTeamResult []WhitelistedAddOnService
// List all whitelisted Add-on Services for a Team
func (s *Service) WhitelistedAddOnServiceListByTeam(ctx context.Context, teamIdentity string, lr *ListRange) (WhitelistedAddOnServiceListByTeamResult, error) {
var whitelistedAddOnService WhitelistedAddOnServiceListByTeamResult
return whitelistedAddOnService, s.Get(ctx, &whitelistedAddOnService, fmt.Sprintf("/teams/%v/whitelisted-addon-services", teamIdentity), nil, lr)
}
type WhitelistedAddOnServiceCreateByTeamOpts struct {
AddonService *string `json:"addon_service,omitempty" url:"addon_service,omitempty,key"` // name of the Add-on to whitelist
}
type WhitelistedAddOnServiceCreateByTeamResult []WhitelistedAddOnService
// Whitelist an Add-on Service
func (s *Service) WhitelistedAddOnServiceCreateByTeam(ctx context.Context, teamIdentity string, o WhitelistedAddOnServiceCreateByTeamOpts) (WhitelistedAddOnServiceCreateByTeamResult, error) {
var whitelistedAddOnService WhitelistedAddOnServiceCreateByTeamResult
return whitelistedAddOnService, s.Post(ctx, &whitelistedAddOnService, fmt.Sprintf("/teams/%v/whitelisted-addon-services", teamIdentity), o)
}
// Remove a whitelisted entity
func (s *Service) WhitelistedAddOnServiceDeleteByTeam(ctx context.Context, teamIdentity string, whitelistedAddOnServiceIdentity string) (*WhitelistedAddOnService, error) {
var whitelistedAddOnService WhitelistedAddOnService
return &whitelistedAddOnService, s.Delete(ctx, &whitelistedAddOnService, fmt.Sprintf("/teams/%v/whitelisted-addon-services/%v", teamIdentity, whitelistedAddOnServiceIdentity))
}