schema.json in platform-api-0.8.0 vs schema.json in platform-api-1.0.0

- old
+ new

@@ -213,10 +213,18 @@ "readOnly": false, "type": [ "string" ] }, + "federated": { + "description": "whether the user is federated and belongs to an Identity Provider", + "example": false, + "readOnly": true, + "type": [ + "boolean" + ] + }, "id": { "description": "unique identifier of an account", "example": "01234567-89ab-cdef-0123-456789abcdef", "format": "uuid", "readOnly": true, @@ -254,18 +262,10 @@ "type": [ "string", "null" ] }, - "new_password": { - "description": "the new password for the account when changing the password", - "example": "newpassword", - "readOnly": true, - "type": [ - "string" - ] - }, "password": { "description": "current password on the account", "example": "currentpassword", "readOnly": true, "type": [ @@ -363,13 +363,10 @@ "beta": { "$ref": "#/definitions/account/definitions/beta" }, "name": { "$ref": "#/definitions/account/definitions/name" - }, - "password": { - "$ref": "#/definitions/account/definitions/password" } }, "type": [ "object" ] @@ -378,61 +375,10 @@ "$ref": "#/definitions/account" }, "title": "Update" }, { - "description": "Change Email for account.", - "href": "/account", - "method": "PATCH", - "rel": "update", - "schema": { - "properties": { - "email": { - "$ref": "#/definitions/account/definitions/email" - }, - "password": { - "$ref": "#/definitions/account/definitions/password" - } - }, - "required": [ - "password", - "email" - ], - "type": [ - "object" - ] - }, - "title": "Change Email" - }, - { - "description": "Change Password for account.", - "href": "/account", - "method": "PATCH", - "rel": "update", - "schema": { - "properties": { - "new_password": { - "$ref": "#/definitions/account/definitions/new_password" - }, - "password": { - "$ref": "#/definitions/account/definitions/password" - } - }, - "required": [ - "new_password", - "password" - ], - "type": [ - "object" - ] - }, - "targetSchema": { - "$ref": "#/definitions/account" - }, - "title": "Change Password" - }, - { "description": "Delete account. Note that this action cannot be undone.", "href": "/account", "method": "DELETE", "rel": "destroy", "targetSchema": { @@ -463,13 +409,10 @@ "beta": { "$ref": "#/definitions/account/definitions/beta" }, "name": { "$ref": "#/definitions/account/definitions/name" - }, - "password": { - "$ref": "#/definitions/account/definitions/password" } }, "type": [ "object" ] @@ -478,61 +421,10 @@ "$ref": "#/definitions/account" }, "title": "Update" }, { - "description": "Change Email for account.", - "href": "/users/{(%23%2Fdefinitions%2Faccount%2Fdefinitions%2Fidentity)}", - "method": "PATCH", - "rel": "update", - "schema": { - "properties": { - "email": { - "$ref": "#/definitions/account/definitions/email" - }, - "password": { - "$ref": "#/definitions/account/definitions/password" - } - }, - "required": [ - "password", - "email" - ], - "type": [ - "object" - ] - }, - "title": "Change Email" - }, - { - "description": "Change Password for account.", - "href": "/users/{(%23%2Fdefinitions%2Faccount%2Fdefinitions%2Fidentity)}", - "method": "PATCH", - "rel": "update", - "schema": { - "properties": { - "new_password": { - "$ref": "#/definitions/account/definitions/new_password" - }, - "password": { - "$ref": "#/definitions/account/definitions/password" - } - }, - "required": [ - "new_password", - "password" - ], - "type": [ - "object" - ] - }, - "targetSchema": { - "$ref": "#/definitions/account" - }, - "title": "Change Password" - }, - { "description": "Delete account. Note that this action cannot be undone.", "href": "/users/{(%23%2Fdefinitions%2Faccount%2Fdefinitions%2Fidentity)}", "method": "DELETE", "rel": "destroy", "targetSchema": { @@ -552,13 +444,38 @@ "$ref": "#/definitions/account/definitions/created_at" }, "email": { "$ref": "#/definitions/account/definitions/email" }, + "federated": { + "$ref": "#/definitions/account/definitions/federated" + }, "id": { "$ref": "#/definitions/account/definitions/id" }, + "identity_provider": { + "description": "Identity Provider details for federated users.", + "properties": { + "id": { + "$ref": "#/definitions/identity-provider/definitions/id" + }, + "organization": { + "type": [ + "object" + ], + "properties": { + "name": { + "$ref": "#/definitions/organization/definitions/name" + } + } + } + }, + "type": [ + "object", + "null" + ] + }, "last_login": { "$ref": "#/definitions/account/definitions/last_login" }, "name": { "$ref": "#/definitions/account/definitions/name" @@ -597,84 +514,47 @@ "null" ] } } }, - "addon-action": { - "description": "Add-on Actions are Provider functionality for specific add-on installations", + "add-on-action": { + "description": "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.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "development", "strictProperties": true, "title": "Heroku Platform API - Add-on Action", "type": [ "object" ], "definitions": { - "id": { - "description": "a unique identifier", - "example": "01234567-89ab-cdef-0123-456789abcdef", - "format": "uuid", - "readOnly": true, - "type": [ - "string" - ] - }, - "identity": { - "$ref": "#/definitions/addon-action/definitions/id" - }, - "label": { - "description": "the display text shown in Dashboard", - "example": "Example", - "readOnly": true, - "type": [ - "string" - ] - }, - "action": { - "description": "identifier of the action to take that is sent via SSO", - "example": "example", - "readOnly": true, - "type": [ - "string" - ] - }, - "url": { - "description": "absolute URL to use instead of an action", - "example": "http://example.com?resource_id=:resource_id", - "readOnly": true, - "type": [ - "string" - ] - }, - "requires_owner": { - "description": "if the action requires the user to own the app", - "example": true, - "readOnly": true, - "type": [ - "boolean" - ] - } }, - "properties": { - "id": { - "$ref": "#/definitions/addon-action/definitions/id" + "links": [ + { + "description": "Mark an add-on as provisioned for use.", + "href": "/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}/actions/provision", + "method": "POST", + "rel": "create", + "targetSchema": { + "$ref": "#/definitions/add-on" + }, + "title": "Create - Provision" }, - "label": { - "$ref": "#/definitions/addon-action/definitions/label" - }, - "action": { - "$ref": "#/definitions/addon-action/definitions/action" - }, - "url": { - "$ref": "#/definitions/addon-action/definitions/url" - }, - "requires_owner": { - "$ref": "#/definitions/addon-action/definitions/requires_owner" + { + "description": "Mark an add-on as deprovisioned.", + "href": "/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}/actions/deprovision", + "method": "POST", + "rel": "create", + "targetSchema": { + "$ref": "#/definitions/add-on" + }, + "title": "Create - Deprovision" } + ], + "properties": { } }, - "addon-attachment": { + "add-on-attachment": { "description": "An add-on attachment represents a connection between an app and an add-on that it has been given access to.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "prototype", "strictProperties": true, "title": "Heroku Platform API - Add-on Attachment", @@ -710,21 +590,21 @@ ] }, "identity": { "anyOf": [ { - "$ref": "#/definitions/addon-attachment/definitions/id" + "$ref": "#/definitions/add-on-attachment/definitions/id" } ] }, "scopedIdentity": { "anyOf": [ { - "$ref": "#/definitions/addon-attachment/definitions/id" + "$ref": "#/definitions/add-on-attachment/definitions/id" }, { - "$ref": "#/definitions/addon-attachment/definitions/name" + "$ref": "#/definitions/add-on-attachment/definitions/name" } ] }, "name": { "description": "unique name for this add-on attachment to this app", @@ -761,20 +641,20 @@ "method": "POST", "rel": "create", "schema": { "properties": { "addon": { - "$ref": "#/definitions/addon/definitions/identity" + "$ref": "#/definitions/add-on/definitions/identity" }, "app": { "$ref": "#/definitions/app/definitions/identity" }, "force": { - "$ref": "#/definitions/addon-attachment/definitions/force" + "$ref": "#/definitions/add-on-attachment/definitions/force" }, "name": { - "$ref": "#/definitions/addon-attachment/definitions/name" + "$ref": "#/definitions/add-on-attachment/definitions/name" } }, "required": [ "addon", "app" @@ -782,57 +662,57 @@ "type": [ "object" ] }, "targetSchema": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "title": "Create" }, { "description": "Delete an existing add-on attachment.", - "href": "/addon-attachments/{(%23%2Fdefinitions%2Faddon-attachment%2Fdefinitions%2Fidentity)}", + "href": "/addon-attachments/{(%23%2Fdefinitions%2Fadd-on-attachment%2Fdefinitions%2Fidentity)}", "method": "DELETE", "rel": "destroy", "targetSchema": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "title": "Delete" }, { "description": "Info for existing add-on attachment.", - "href": "/addon-attachments/{(%23%2Fdefinitions%2Faddon-attachment%2Fdefinitions%2Fidentity)}", + "href": "/addon-attachments/{(%23%2Fdefinitions%2Fadd-on-attachment%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "title": "Info" }, { "description": "List existing add-on attachments.", "href": "/addon-attachments", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "type": [ "array" ] }, "title": "List" }, { "description": "List existing add-on attachments for an add-on.", - "href": "/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}/addon-attachments", + "href": "/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}/addon-attachments", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "type": [ "array" ] }, @@ -843,38 +723,38 @@ "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addon-attachments", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "type": [ "array" ] }, "title": "List by App" }, { "description": "Info for existing add-on attachment for an app.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addon-attachments/{(%23%2Fdefinitions%2Faddon-attachment%2Fdefinitions%2FscopedIdentity)}", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addon-attachments/{(%23%2Fdefinitions%2Fadd-on-attachment%2Fdefinitions%2FscopedIdentity)}", "method": "GET", "rel": "self", "targetSchema": { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, "title": "Info by App" } ], "properties": { "addon": { "description": "identity of add-on", "properties": { "id": { - "$ref": "#/definitions/addon/definitions/id" + "$ref": "#/definitions/add-on/definitions/id" }, "name": { - "$ref": "#/definitions/addon/definitions/name" + "$ref": "#/definitions/add-on/definitions/name" }, "app": { "description": "billing application associated with this add-on", "type": [ "object" @@ -886,13 +766,33 @@ "name": { "$ref": "#/definitions/app/definitions/name" } }, "strictProperties": true + }, + "plan": { + "description": "identity of add-on plan", + "properties": { + "id": { + "$ref": "#/definitions/plan/definitions/id" + }, + "name": { + "$ref": "#/definitions/plan/definitions/name" + } + }, + "strictProperties": true, + "type": [ + "object" + ] } }, - "strictProperties": true, + "additionalProperties": false, + "required": [ + "id", + "name", + "app" + ], "type": [ "object" ] }, "app": { @@ -909,27 +809,27 @@ "type": [ "object" ] }, "created_at": { - "$ref": "#/definitions/addon-attachment/definitions/created_at" + "$ref": "#/definitions/add-on-attachment/definitions/created_at" }, "id": { - "$ref": "#/definitions/addon-attachment/definitions/id" + "$ref": "#/definitions/add-on-attachment/definitions/id" }, "name": { - "$ref": "#/definitions/addon-attachment/definitions/name" + "$ref": "#/definitions/add-on-attachment/definitions/name" }, "updated_at": { - "$ref": "#/definitions/addon-attachment/definitions/updated_at" + "$ref": "#/definitions/add-on-attachment/definitions/updated_at" }, "web_url": { - "$ref": "#/definitions/addon-attachment/definitions/web_url" + "$ref": "#/definitions/add-on-attachment/definitions/web_url" } } }, - "addon-config": { + "add-on-config": { "description": "Configuration of an Add-on", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "development", "strictProperties": true, "title": "Heroku Platform API - Add-on Config", @@ -938,11 +838,11 @@ ], "definitions": { "identity": { "anyOf": [ { - "$ref": "#/definitions/addon-config/definitions/name" + "$ref": "#/definitions/add-on-config/definitions/name" } ] }, "name": { "description": "unique name of the config", @@ -960,34 +860,34 @@ ] } }, "links": [ { - "description": "Get an add-on's config", - "href": "/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}/config", + "description": "Get an add-on's config. Accessible by customers with access and by the add-on partner providing this add-on.", + "href": "/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}/config", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-config" + "$ref": "#/definitions/add-on-config" }, "type": [ "array" ] }, "title": "List" }, { - "description": "Update an add-on's config.", - "href": "/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}/config", + "description": "Update an add-on's config. Can only be accessed by the add-on partner providing this add-on.", + "href": "/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}/config", "method": "PATCH", "rel": "update", "schema": { "properties": { "config": { "items": { - "$ref": "#/definitions/addon-config" + "$ref": "#/definitions/add-on-config" }, "type": [ "array" ] } @@ -996,37 +896,110 @@ "object" ] }, "targetSchema": { "items": { - "$ref": "#/definitions/addon-config" + "$ref": "#/definitions/add-on-config" } }, "title": "Update" } ], "properties": { "name": { - "$ref": "#/definitions/addon-config/definitions/name" + "$ref": "#/definitions/add-on-config/definitions/name" }, "value": { - "$ref": "#/definitions/addon-config/definitions/value" + "$ref": "#/definitions/add-on-config/definitions/value" } } }, - "addon-region-capability": { - "description": "Add-on region capabilities represent the relationship between an Add-on Service and a specific Region", + "add-on-plan-action": { + "description": "Add-on Plan Actions are Provider functionality for specific add-on installations", "$schema": "http://json-schema.org/draft-04/hyper-schema", + "stability": "development", + "strictProperties": true, + "title": "Heroku Platform API - Add-on Plan Action", + "type": [ + "object" + ], + "definitions": { + "id": { + "description": "a unique identifier", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, + "identity": { + "$ref": "#/definitions/add-on-plan-action/definitions/id" + }, + "label": { + "description": "the display text shown in Dashboard", + "example": "Example", + "readOnly": true, + "type": [ + "string" + ] + }, + "action": { + "description": "identifier of the action to take that is sent via SSO", + "example": "example", + "readOnly": true, + "type": [ + "string" + ] + }, + "url": { + "description": "absolute URL to use instead of an action", + "example": "http://example.com?resource_id=:resource_id", + "readOnly": true, + "type": [ + "string" + ] + }, + "requires_owner": { + "description": "if the action requires the user to own the app", + "example": true, + "readOnly": true, + "type": [ + "boolean" + ] + } + }, + "properties": { + "id": { + "$ref": "#/definitions/add-on-plan-action/definitions/id" + }, + "label": { + "$ref": "#/definitions/add-on-plan-action/definitions/label" + }, + "action": { + "$ref": "#/definitions/add-on-plan-action/definitions/action" + }, + "url": { + "$ref": "#/definitions/add-on-plan-action/definitions/url" + }, + "requires_owner": { + "$ref": "#/definitions/add-on-plan-action/definitions/requires_owner" + } + } + }, + "add-on-region-capability": { + "description": "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.", + "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, "title": "Heroku Platform API - Add-on Region Capability", "type": [ "object" ], "definitions": { "id": { - "description": "unique identifier of this addon-region-capability", + "description": "unique identifier of this add-on-region-capability", "example": "01234567-89ab-cdef-0123-456789abcdef", "format": "uuid", "readOnly": true, "type": [ "string" @@ -1038,37 +1011,37 @@ "type": [ "boolean" ] }, "identity": { - "$ref": "#/definitions/addon-region-capability/definitions/id" + "$ref": "#/definitions/add-on-region-capability/definitions/id" } }, "links": [ { "description": "List all existing add-on region capabilities.", "href": "/addon-region-capabilities", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-region-capability" + "$ref": "#/definitions/add-on-region-capability" }, "type": [ "array" ] }, "title": "List" }, { - "description": "List existing add-on region capabilities for an addon-service", - "href": "/addon-services/{(%23%2Fdefinitions%2Faddon-service%2Fdefinitions%2Fidentity)}/region-capabilities", + "description": "List existing add-on region capabilities for an add-on-service", + "href": "/addon-services/{(%23%2Fdefinitions%2Fadd-on-service%2Fdefinitions%2Fidentity)}/region-capabilities", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-region-capability" + "$ref": "#/definitions/add-on-region-capability" }, "type": [ "array" ] }, @@ -1079,35 +1052,35 @@ "href": "/regions/{(%23%2Fdefinitions%2Fregion%2Fdefinitions%2Fidentity)}/addon-region-capabilities", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-region-capability" + "$ref": "#/definitions/add-on-region-capability" }, "type": [ "array" ] }, "title": "List" } ], "properties": { "id": { - "$ref": "#/definitions/addon-region-capability/definitions/id" + "$ref": "#/definitions/add-on-region-capability/definitions/id" }, "supports_private_networking": { - "$ref": "#/definitions/addon-region-capability/definitions/supports_private_networking" + "$ref": "#/definitions/add-on-region-capability/definitions/supports_private_networking" }, "addon_service": { - "$ref": "#/definitions/addon-service" + "$ref": "#/definitions/add-on-service" }, "region": { "$ref": "#/definitions/region" } } }, - "addon-service": { + "add-on-service": { "description": "Add-on services represent add-ons that may be provisioned for apps. Endpoints under add-on services can be accessed without authentication.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, "title": "Heroku Platform API - Add-on Service", @@ -1123,47 +1096,47 @@ "string", "null" ] }, "created_at": { - "description": "when addon-service was created", + "description": "when add-on-service was created", "example": "2012-01-01T12:00:00Z", "format": "date-time", "readOnly": true, "type": [ "string" ] }, "human_name": { - "description": "human-readable name of the addon service provider", + "description": "human-readable name of the add-on service provider", "example": "Heroku Postgres", "readOnly": true, "type": [ "string" ] }, "id": { - "description": "unique identifier of this addon-service", + "description": "unique identifier of this add-on-service", "example": "01234567-89ab-cdef-0123-456789abcdef", "format": "uuid", "readOnly": true, "type": [ "string" ] }, "identity": { "anyOf": [ { - "$ref": "#/definitions/addon-service/definitions/id" + "$ref": "#/definitions/add-on-service/definitions/id" }, { - "$ref": "#/definitions/addon-service/definitions/name" + "$ref": "#/definitions/add-on-service/definitions/name" } ] }, "name": { - "description": "unique name of this addon-service", + "description": "unique name of this add-on-service", "example": "heroku-postgresql", "readOnly": true, "type": [ "string" ] @@ -1199,77 +1172,77 @@ "type": [ "boolean" ] }, "updated_at": { - "description": "when addon-service was updated", + "description": "when add-on-service was updated", "example": "2012-01-01T12:00:00Z", "format": "date-time", "readOnly": true, "type": [ "string" ] } }, "links": [ { - "description": "Info for existing addon-service.", - "href": "/addon-services/{(%23%2Fdefinitions%2Faddon-service%2Fdefinitions%2Fidentity)}", + "description": "Info for existing add-on-service.", + "href": "/addon-services/{(%23%2Fdefinitions%2Fadd-on-service%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { - "$ref": "#/definitions/addon-service" + "$ref": "#/definitions/add-on-service" }, "title": "Info" }, { - "description": "List existing addon-services.", + "description": "List existing add-on-services.", "href": "/addon-services", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon-service" + "$ref": "#/definitions/add-on-service" }, "type": [ "array" ] }, "title": "List" } ], "properties": { "cli_plugin_name": { - "$ref": "#/definitions/addon-service/definitions/cli_plugin_name" + "$ref": "#/definitions/add-on-service/definitions/cli_plugin_name" }, "created_at": { - "$ref": "#/definitions/addon-service/definitions/created_at" + "$ref": "#/definitions/add-on-service/definitions/created_at" }, "human_name": { - "$ref": "#/definitions/addon-service/definitions/human_name" + "$ref": "#/definitions/add-on-service/definitions/human_name" }, "id": { - "$ref": "#/definitions/addon-service/definitions/id" + "$ref": "#/definitions/add-on-service/definitions/id" }, "name": { - "$ref": "#/definitions/addon-service/definitions/name" + "$ref": "#/definitions/add-on-service/definitions/name" }, "state": { - "$ref": "#/definitions/addon-service/definitions/state" + "$ref": "#/definitions/add-on-service/definitions/state" }, "supports_multiple_installations": { - "$ref": "#/definitions/addon-service/definitions/supports_multiple_installations" + "$ref": "#/definitions/add-on-service/definitions/supports_multiple_installations" }, "supports_sharing": { - "$ref": "#/definitions/addon-service/definitions/supports_sharing" + "$ref": "#/definitions/add-on-service/definitions/supports_sharing" }, "updated_at": { - "$ref": "#/definitions/addon-service/definitions/updated_at" + "$ref": "#/definitions/add-on-service/definitions/updated_at" } } }, - "addon": { + "add-on": { "description": "Add-ons represent add-ons that have been provisioned and attached to one or more apps.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, "title": "Heroku Platform API - Add-on", @@ -1288,23 +1261,23 @@ ] }, "readOnly": true, "properties": { "id": { - "$ref": "#/definitions/addon-action/definitions/id" + "$ref": "#/definitions/add-on-plan-action/definitions/id" }, "label": { - "$ref": "#/definitions/addon-action/definitions/label" + "$ref": "#/definitions/add-on-plan-action/definitions/label" }, "action": { - "$ref": "#/definitions/addon-action/definitions/action" + "$ref": "#/definitions/add-on-plan-action/definitions/action" }, "url": { - "$ref": "#/definitions/addon-action/definitions/url" + "$ref": "#/definitions/add-on-plan-action/definitions/url" }, "requires_owner": { - "$ref": "#/definitions/addon-action/definitions/requires_owner" + "$ref": "#/definitions/add-on-plan-action/definitions/requires_owner" } } }, "config_vars": { "description": "config vars exposed to the owning app by this add-on", @@ -1341,14 +1314,14 @@ ] }, "identity": { "anyOf": [ { - "$ref": "#/definitions/addon/definitions/id" + "$ref": "#/definitions/add-on/definitions/id" }, { - "$ref": "#/definitions/addon/definitions/name" + "$ref": "#/definitions/add-on/definitions/name" } ] }, "name": { "description": "globally unique name of the add-on", @@ -1365,10 +1338,23 @@ "readOnly": true, "type": [ "string" ] }, + "state": { + "description": "state in the add-on's lifecycle", + "enum": [ + "provisioning", + "provisioned", + "deprovisioned" + ], + "example": "provisioned", + "readOnly": true, + "type": [ + "string" + ] + }, "updated_at": { "description": "when add-on was updated", "example": "2012-01-01T12:00:00Z", "format": "date-time", "readOnly": true, @@ -1399,11 +1385,11 @@ "description": "name for add-on's initial attachment", "example": { "name": "DATABASE_FOLLOWER" }, "name": { - "$ref": "#/definitions/addon-attachment/definitions/name" + "$ref": "#/definitions/add-on-attachment/definitions/name" }, "type": [ "object" ] }, @@ -1434,77 +1420,92 @@ "type": [ "object" ] }, "targetSchema": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "title": "Create" }, { "description": "Delete an existing add-on.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}", "method": "DELETE", "rel": "destroy", "targetSchema": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "title": "Delete" }, { "description": "Info for an existing add-on.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "title": "Info" }, { "description": "List all existing add-ons.", "href": "/addons", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "type": [ "array" ] }, "title": "List" }, { "description": "Info for an existing add-on.", - "href": "/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}", + "href": "/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "title": "Info" }, { + "description": "List all existing add-ons a user has access to", + "href": "/users/{(%23%2Fdefinitions%2Faccount%2Fdefinitions%2Fidentity)}/addons", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/add-on" + }, + "type": [ + "array" + ] + }, + "title": "List by User" + }, + { "description": "List existing add-ons for an app.", "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "type": [ "array" ] }, "title": "List by App" }, { "description": "Change add-on plan. Some add-ons may not support changing plans. In that case, an error will be returned.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons/{(%23%2Fdefinitions%2Faddon%2Fdefinitions%2Fidentity)}", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/addons/{(%23%2Fdefinitions%2Fadd-on%2Fdefinitions%2Fidentity)}", "method": "PATCH", "rel": "update", "schema": { "properties": { "plan": { @@ -1521,20 +1522,20 @@ "title": "Update" } ], "properties": { "actions": { - "$ref": "#/definitions/addon/definitions/actions" + "$ref": "#/definitions/add-on/definitions/actions" }, "addon_service": { "description": "identity of add-on service", "properties": { "id": { - "$ref": "#/definitions/addon-service/definitions/id" + "$ref": "#/definitions/add-on-service/definitions/id" }, "name": { - "$ref": "#/definitions/addon-service/definitions/name" + "$ref": "#/definitions/add-on-service/definitions/name" } }, "strictProperties": true, "type": [ "object" @@ -1554,20 +1555,20 @@ } }, "strictProperties": true }, "config_vars": { - "$ref": "#/definitions/addon/definitions/config_vars" + "$ref": "#/definitions/add-on/definitions/config_vars" }, "created_at": { - "$ref": "#/definitions/addon/definitions/created_at" + "$ref": "#/definitions/add-on/definitions/created_at" }, "id": { - "$ref": "#/definitions/addon/definitions/id" + "$ref": "#/definitions/add-on/definitions/id" }, "name": { - "$ref": "#/definitions/addon/definitions/name" + "$ref": "#/definitions/add-on/definitions/name" }, "plan": { "description": "identity of add-on plan", "properties": { "id": { @@ -1581,17 +1582,20 @@ "type": [ "object" ] }, "provider_id": { - "$ref": "#/definitions/addon/definitions/provider_id" + "$ref": "#/definitions/add-on/definitions/provider_id" }, + "state": { + "$ref": "#/definitions/add-on/definitions/state" + }, "updated_at": { - "$ref": "#/definitions/addon/definitions/updated_at" + "$ref": "#/definitions/add-on/definitions/updated_at" }, "web_url": { - "$ref": "#/definitions/addon/definitions/web_url" + "$ref": "#/definitions/add-on/definitions/web_url" } } }, "app-feature": { "description": "An app feature represents a Heroku labs capability that can be enabled or disabled for an app on Heroku.", @@ -1756,10 +1760,68 @@ "updated_at": { "$ref": "#/definitions/app-feature/definitions/updated_at" } } }, + "app-formation-set": { + "description": "App formation set describes the combination of process types with their quantities and sizes as well as application process tier", + "$schema": "http://json-schema.org/draft-04/hyper-schema", + "stability": "development", + "strictProperties": true, + "title": "Heroku Platform API - Application Formation Set", + "type": [ + "object" + ], + "properties": { + "description": { + "description": "a string representation of the formation set", + "example": "web@2:Standard-2X worker@3:Performance-M", + "readOnly": true, + "type": [ + "string" + ] + }, + "process_tier": { + "description": "application process tier", + "enum": [ + "production", + "traditional", + "free", + "hobby", + "private" + ], + "example": "production", + "readOnly": true, + "type": [ + "string" + ] + }, + "app": { + "description": "app being described by the formation-set", + "properties": { + "name": { + "$ref": "#/definitions/app/definitions/name" + }, + "id": { + "$ref": "#/definitions/app/definitions/id" + } + }, + "type": [ + "object" + ] + }, + "updated_at": { + "description": "last time fomation-set was updated", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + } + } + }, "app-setup": { "description": "An app setup represents an app on Heroku that is setup using an environment, addons, and scripts described in an app.json manifest file.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, @@ -1782,10 +1844,25 @@ { "$ref": "#/definitions/app-setup/definitions/id" } ] }, + "buildpack_override": { + "description": "a buildpack override", + "properties": { + "url": { + "description": "location of the buildpack", + "example": "https://example.com/buildpack.tgz", + "type": [ + "string" + ] + } + }, + "type": [ + "object" + ] + }, "created_at": { "description": "when app setup was created", "example": "2012-01-01T12:00:00Z", "readOnly": true, "type": [ @@ -1846,10 +1923,62 @@ }, "type": [ "array" ] }, + "overrides": { + "description": "overrides of keys in the app.json manifest file", + "example": { + "buildpacks": [ + { + "url": "https://example.com/buildpack.tgz" + } + ], + "env": { + "FOO": "bar", + "BAZ": "qux" + } + }, + "properties": { + "buildpacks": { + "description": "overrides the buildpacks specified in the app.json manifest file", + "example": [ + { + "url": "https://example.com/buildpack.tgz" + } + ], + "items": { + "$ref": "#/definitions/app-setup/definitions/buildpack_override" + }, + "type": [ + "array" + ] + }, + "env": { + "description": "overrides of the env specified in the app.json manifest file", + "example": { + "FOO": "bar", + "BAZ": "qux" + }, + "readOnly": true, + "additionalProperties": false, + "patternProperties": { + "^\\w+$": { + "type": [ + "string" + ] + } + }, + "type": [ + "object" + ] + } + }, + "type": [ + "object" + ] + }, "postdeploy": { "description": "result of postdeploy script", "type": [ "object", "null" @@ -1966,10 +2095,13 @@ "$ref": "#/definitions/organization-app/definitions/personal" }, "region": { "$ref": "#/definitions/region/definitions/name" }, + "space": { + "$ref": "#/definitions/space/definitions/name" + }, "stack": { "$ref": "#/definitions/stack/definitions/name" } }, "type": [ @@ -2009,41 +2141,11 @@ "type": [ "object" ] }, "overrides": { - "description": "overrides of keys in the app.json manifest file", - "example": { - "env": { - "FOO": "bar", - "BAZ": "qux" - } - }, - "properties": { - "env": { - "description": "overrides of the env specified in the app.json manifest file", - "example": { - "FOO": "bar", - "BAZ": "qux" - }, - "readOnly": true, - "additionalProperties": false, - "patternProperties": { - "^\\w+$": { - "type": [ - "string" - ] - } - }, - "type": [ - "object" - ] - } - }, - "type": [ - "object" - ] + "$ref": "#/definitions/app-setup/definitions/overrides" } } }, "targetSchema": { "$ref": "#/definitions/app-setup" @@ -2411,10 +2513,19 @@ "pattern": "^https?://[a-z][a-z0-9-]{3,30}\\.herokuapp\\.com/$", "readOnly": true, "type": [ "string" ] + }, + "acm": { + "description": "ACM status of this app", + "default": false, + "example": false, + "readOnly": true, + "type": [ + "boolean" + ] } }, "links": [ { "description": "Create a new app.", @@ -2626,10 +2737,13 @@ "id": { "$ref": "#/definitions/space/definitions/id" }, "name": { "$ref": "#/definitions/space/definitions/name" + }, + "shield": { + "$ref": "#/definitions/space/definitions/shield" } }, "type": [ "null", "object" @@ -2780,10 +2894,28 @@ "strictProperties": true, "type": [ "object" ], "definitions": { + "buildpacks": { + "description": "buildpacks executed for this build, in order", + "type": [ + "array", + "null" + ], + "items": { + "description": "Buildpack to execute in a build", + "type": [ + "object" + ], + "properties": { + "url": { + "$ref": "#/definitions/buildpack-installation/definitions/url" + } + } + } + }, "created_at": { "description": "when build was created", "example": "2012-01-01T12:00:00Z", "format": "date-time", "readOnly": true, @@ -2908,10 +3040,13 @@ "schema": { "type": [ "object" ], "properties": { + "buildpacks": { + "$ref": "#/definitions/build/definitions/buildpacks" + }, "source_blob": { "$ref": "#/definitions/build/definitions/source_blob" } }, "required": [ @@ -2965,26 +3100,11 @@ "type": [ "object" ] }, "buildpacks": { - "description": "buildpacks executed for this build, in order", - "type": [ - "array", - "null" - ], - "items": { - "description": "Buildpack to execute in a build", - "type": [ - "object" - ], - "properties": { - "url": { - "$ref": "#/definitions/buildpack-installation/definitions/url" - } - } - } + "$ref": "#/definitions/build/definitions/buildpacks" }, "created_at": { "$ref": "#/definitions/build/definitions/created_at" }, "id": { @@ -3158,10 +3278,18 @@ } }, "collaborator": { "description": "A collaborator represents an account that has been given access to an app on Heroku.", "$schema": "http://json-schema.org/draft-04/hyper-schema", + "additionalProperties": false, + "required": [ + "app", + "created_at", + "id", + "updated_at", + "user" + ], "stability": "production", "title": "Heroku Platform API - Collaborator", "type": [ "object" ], @@ -3305,36 +3433,43 @@ "$ref": "#/definitions/collaborator/definitions/created_at" }, "id": { "$ref": "#/definitions/collaborator/definitions/id" }, + "permissions": { + "type": [ + "array" + ], + "items": { + "$ref": "#/definitions/organization-app-permission" + } + }, + "role": { + "$ref": "#/definitions/organization/definitions/role" + }, "updated_at": { "$ref": "#/definitions/collaborator/definitions/updated_at" }, "user": { "description": "identity of collaborated account", "properties": { "email": { "$ref": "#/definitions/account/definitions/email" }, + "federated": { + "$ref": "#/definitions/account/definitions/federated" + }, "id": { "$ref": "#/definitions/account/definitions/id" } }, "strictProperties": true, "type": [ "object" ] } - }, - "required": [ - "app", - "created_at", - "id", - "updated_at", - "user" - ] + } }, "config-var": { "description": "Config Vars allow you to manage the configuration information provided to an app on Heroku.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", @@ -3371,13 +3506,23 @@ "method": "GET", "rel": "self", "targetSchema": { "$ref": "#/definitions/config-var/definitions/config_vars" }, - "title": "Info" + "title": "Info for App" }, { + "description": "Get config-vars for a release.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/releases/{(%23%2Fdefinitions%2Frelease%2Fdefinitions%2Fidentity)}/config-vars", + "method": "GET", + "rel": "self", + "targetSchema": { + "$ref": "#/definitions/config-var/definitions/config_vars" + }, + "title": "Info for App Release" + }, + { "description": "Update config-vars for app. You can update existing config-vars by setting them again, and remove by setting it to `null`.", "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/config-vars", "method": "PATCH", "rel": "update", "schema": { @@ -3752,10 +3897,168 @@ "status": { "$ref": "#/definitions/domain/definitions/status" } } }, + "dyno-size": { + "description": "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.heroku.com/articles/dyno-types).", + "$schema": "http://json-schema.org/draft-04/hyper-schema", + "stability": "prototype", + "strictProperties": true, + "title": "Heroku Platform API - Dyno Size", + "type": [ + "object" + ], + "definitions": { + "compute": { + "description": "minimum vCPUs, non-dedicated may get more depending on load", + "example": 1, + "readOnly": true, + "type": [ + "integer" + ] + }, + "dedicated": { + "description": "whether this dyno will be dedicated to one user", + "example": false, + "readOnly": true, + "type": [ + "boolean" + ] + }, + "id": { + "description": "unique identifier of this dyno size", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, + "identity": { + "anyOf": [ + { + "$ref": "#/definitions/dyno-size/definitions/id" + }, + { + "$ref": "#/definitions/dyno-size/definitions/name" + } + ] + }, + "memory": { + "description": "amount of RAM in GB", + "example": 0.5, + "readOnly": true, + "type": [ + "number" + ] + }, + "name": { + "description": "the name of this dyno-size", + "example": "free", + "readOnly": true, + "type": [ + "string" + ] + }, + "cost": { + "description": "price information for this dyno size", + "readOnly": true, + "type": [ + "null", + "object" + ], + "definitions": { + "cents": { + "description": "price in cents per unit time", + "example": 0, + "readOnly": true, + "type": [ + "integer" + ] + }, + "unit": { + "description": "unit of price for dyno", + "readOnly": true, + "example": "month", + "type": [ + "string" + ] + } + } + }, + "dyno_units": { + "description": "unit of consumption for Heroku Enterprise customers", + "example": 0, + "readOnly": true, + "type": [ + "integer" + ] + }, + "private_space_only": { + "description": "whether this dyno can only be provisioned in a private space", + "example": false, + "readOnly": true, + "type": [ + "boolean" + ] + } + }, + "links": [ + { + "description": "Info for existing dyno size.", + "href": "/dyno-sizes/{(%23%2Fdefinitions%2Fdyno-size%2Fdefinitions%2Fidentity)}", + "method": "GET", + "rel": "self", + "targetSchema": { + "$ref": "#/definitions/dyno-size" + }, + "title": "Info" + }, + { + "description": "List existing dyno sizes.", + "href": "/dyno-sizes", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/dyno-size" + }, + "type": [ + "array" + ] + }, + "title": "List" + } + ], + "properties": { + "compute": { + "$ref": "#/definitions/dyno-size/definitions/compute" + }, + "cost": { + "$ref": "#/definitions/dyno-size/definitions/cost" + }, + "dedicated": { + "$ref": "#/definitions/dyno-size/definitions/dedicated" + }, + "dyno_units": { + "$ref": "#/definitions/dyno-size/definitions/dyno_units" + }, + "id": { + "$ref": "#/definitions/dyno-size/definitions/id" + }, + "memory": { + "$ref": "#/definitions/dyno-size/definitions/memory" + }, + "name": { + "$ref": "#/definitions/dyno-size/definitions/name" + }, + "private_space_only": { + "$ref": "#/definitions/dyno-size/definitions/private_space_only" + } + } + }, "dyno": { "description": "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.heroku.com/articles/dyno-types).", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, @@ -3950,11 +4253,11 @@ ] }, "title": "Restart" }, { - "description": "Restart all dynos", + "description": "Restart all dynos.", "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/dynos", "method": "DELETE", "rel": "empty", "targetSchema": { "additionalPoperties": false, @@ -3963,10 +4266,23 @@ ] }, "title": "Restart all" }, { + "description": "Stop dyno.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/dynos/{(%23%2Fdefinitions%2Fdyno%2Fdefinitions%2Fidentity)}/actions/stop", + "method": "POST", + "rel": "empty", + "targetSchema": { + "additionalPoperties": false, + "type": [ + "object" + ] + }, + "title": "Stop" + }, + { "description": "Info for existing dyno.", "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/dynos/{(%23%2Fdefinitions%2Fdyno%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { @@ -4088,19 +4404,22 @@ "anyOf": [ { "$ref": "#/definitions/account" }, { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, { - "$ref": "#/definitions/addon-attachment" + "$ref": "#/definitions/add-on-attachment" }, { "$ref": "#/definitions/app" }, { + "$ref": "#/definitions/app-formation-set" + }, + { "$ref": "#/definitions/app-setup" }, { "$ref": "#/definitions/app-transfer" }, @@ -4121,10 +4440,13 @@ }, { "$ref": "#/definitions/formation" }, { + "$ref": "#/definitions/inbound-ruleset" + }, + { "$ref": "#/definitions/organization" }, { "$ref": "#/definitions/release" }, @@ -4175,10 +4497,12 @@ "collaborator", "domain", "dyno", "failed-event", "formation", + "formation-set", + "inbound-ruleset", "organization", "release", "space", "user" ], @@ -4528,10 +4852,11 @@ }, "type": { "description": "type of process to maintain", "example": "web", "readOnly": true, + "pattern": "^[-\\w]{1,128}$", "type": [ "string" ] }, "updated_at": { @@ -4689,10 +5014,206 @@ "updated_at": { "$ref": "#/definitions/formation/definitions/updated_at" } } }, + "identity-provider": { + "description": "Identity Providers represent the SAML configuration of an Organization.", + "$schema": "http://json-schema.org/draft-04/hyper-schema", + "stability": "production", + "strictProperties": true, + "title": "Heroku Platform API - Identity Provider", + "type": [ + "object" + ], + "definitions": { + "certificate": { + "description": "raw contents of the public certificate (eg: .crt or .pem file)", + "example": "-----BEGIN CERTIFICATE----- ...", + "readOnly": false, + "type": [ + "string" + ] + }, + "created_at": { + "description": "when provider record was created", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + }, + "entity_id": { + "description": "URL identifier provided by the identity provider", + "example": "https://customer-domain.idp.com", + "readOnly": false, + "type": [ + "string" + ] + }, + "id": { + "description": "unique identifier of this identity provider", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, + "slo_target_url": { + "description": "single log out URL for this identity provider", + "example": "https://example.com/idp/logout", + "readOnly": false, + "type": [ + "string" + ] + }, + "sso_target_url": { + "description": "single sign on URL for this identity provider", + "example": "https://example.com/idp/login", + "readOnly": false, + "type": [ + "string" + ] + }, + "updated_at": { + "description": "when the identity provider record was updated", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + } + }, + "links": [ + { + "description": "Get a list of an organization's Identity Providers", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fname)}/identity-providers", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/identity-provider" + }, + "type": [ + "array" + ] + }, + "title": "List" + }, + { + "description": "Create an Identity Provider for an organization", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fname)}/identity-providers", + "method": "POST", + "rel": "create", + "schema": { + "properties": { + "certificate": { + "$ref": "#/definitions/identity-provider/definitions/certificate" + }, + "entity_id": { + "$ref": "#/definitions/identity-provider/definitions/entity_id" + }, + "slo_target_url": { + "$ref": "#/definitions/identity-provider/definitions/slo_target_url" + }, + "sso_target_url": { + "$ref": "#/definitions/identity-provider/definitions/sso_target_url" + } + }, + "required": [ + "certificate", + "sso_target_url", + "entity_id" + ], + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/identity-provider" + }, + "title": "Create" + }, + { + "description": "Update an organization's Identity Provider", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fname)}/identity-providers/{(%23%2Fdefinitions%2Fidentity-provider%2Fdefinitions%2Fid)}", + "method": "PATCH", + "rel": "update", + "schema": { + "properties": { + "certificate": { + "$ref": "#/definitions/identity-provider/definitions/certificate" + }, + "entity_id": { + "$ref": "#/definitions/identity-provider/definitions/entity_id" + }, + "slo_target_url": { + "$ref": "#/definitions/identity-provider/definitions/slo_target_url" + }, + "sso_target_url": { + "$ref": "#/definitions/identity-provider/definitions/sso_target_url" + } + }, + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/identity-provider" + }, + "title": "Update" + }, + { + "description": "Delete an organization's Identity Provider", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fname)}/identity-providers/{(%23%2Fdefinitions%2Fidentity-provider%2Fdefinitions%2Fid)}", + "method": "DELETE", + "rel": "destroy", + "targetSchema": { + "$ref": "#/definitions/identity-provider" + }, + "title": "Delete" + } + ], + "properties": { + "certificate": { + "$ref": "#/definitions/identity-provider/definitions/certificate" + }, + "created_at": { + "$ref": "#/definitions/identity-provider/definitions/created_at" + }, + "entity_id": { + "$ref": "#/definitions/identity-provider/definitions/entity_id" + }, + "id": { + "$ref": "#/definitions/identity-provider/definitions/id" + }, + "slo_target_url": { + "$ref": "#/definitions/identity-provider/definitions/slo_target_url" + }, + "sso_target_url": { + "$ref": "#/definitions/identity-provider/definitions/sso_target_url" + }, + "organization": { + "description": "organization associated with this identity provider", + "properties": { + "name": { + "$ref": "#/definitions/organization/definitions/name" + } + }, + "type": [ + "null", + "object" + ] + }, + "updated_at": { + "$ref": "#/definitions/identity-provider/definitions/updated_at" + } + } + }, "inbound-ruleset": { "description": "An inbound-ruleset is a collection of rules that specify what hosts can or cannot connect to an application.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "prototype", "strictProperties": true, @@ -4877,18 +5398,52 @@ "readOnly": true, "type": [ "boolean" ] }, + "verification_required": { + "description": "if the invitation requires verification", + "example": false, + "readOnly": true, + "type": [ + "boolean" + ] + }, "token": { "description": "Unique identifier of an invitation", "example": "01234567-89ab-cdef-0123-456789abcdef", "format": "uuid", "readOnly": true, "type": [ "string" ] + }, + "phone_number": { + "description": "Phone number to send verification code", + "example": "+1 123-123-1234", + "type": [ + "string" + ] + }, + "method": { + "description": "Transport used to send verification code", + "example": "sms", + "default": "sms", + "type": [ + "string" + ], + "enum": [ + "call", + "sms" + ] + }, + "verification_code": { + "description": "Value used to verify invitation", + "example": "123456", + "type": [ + "string" + ] } }, "links": [ { "description": "Info for invitation.", @@ -4896,62 +5451,108 @@ "method": "GET", "rel": "self", "title": "Info" }, { - "description": "Finalize Invitation and Create Account.", - "href": "/invitations/{(%23%2Fdefinitions%2Finvitation%2Fdefinitions%2Fidentity)}", - "method": "PATCH", - "rel": "update", + "description": "Invite a user.", + "href": "/invitations", + "method": "POST", + "rel": "self", "schema": { "properties": { - "password": { - "$ref": "#/definitions/account/definitions/password" + "email": { + "$ref": "#/definitions/account/definitions/email" }, - "password_confirmation": { - "$ref": "#/definitions/account/definitions/password" + "name": { + "$ref": "#/definitions/account/definitions/name" + } + }, + "required": [ + "email", + "name" + ], + "type": [ + "object" + ] + }, + "title": "Create" + }, + { + "description": "Send a verification code for an invitation via SMS/phone call.", + "href": "/invitations/{(%23%2Fdefinitions%2Finvitation%2Fdefinitions%2Fidentity)}/actions/send-verification", + "method": "POST", + "rel": "empty", + "schema": { + "properties": { + "phone_number": { + "$ref": "#/definitions/invitation/definitions/phone_number" }, - "receive_newsletter": { - "$ref": "#/definitions/invitation/definitions/receive_newsletter" + "method": { + "$ref": "#/definitions/invitation/definitions/method" } }, "required": [ - "password", - "password_confirmation" + "phone_number" ], "type": [ "object" ] }, - "title": "Finalize Invitation" + "title": "Send Verification Code" }, { - "description": "Invite a user.", - "href": "/invitations", + "description": "Verify an invitation using a verification code.", + "href": "/invitations/{(%23%2Fdefinitions%2Finvitation%2Fdefinitions%2Fidentity)}/actions/verify", "method": "POST", "rel": "self", "schema": { "properties": { - "email": { - "$ref": "#/definitions/account/definitions/email" + "verification_code": { + "$ref": "#/definitions/invitation/definitions/verification_code" + } + }, + "required": [ + "verification_code" + ], + "type": [ + "object" + ] + }, + "title": "Verify" + }, + { + "description": "Finalize Invitation and Create Account.", + "href": "/invitations/{(%23%2Fdefinitions%2Finvitation%2Fdefinitions%2Fidentity)}", + "method": "PATCH", + "rel": "update", + "schema": { + "properties": { + "password": { + "$ref": "#/definitions/account/definitions/password" }, - "name": { - "$ref": "#/definitions/account/definitions/name" + "password_confirmation": { + "$ref": "#/definitions/account/definitions/password" + }, + "receive_newsletter": { + "$ref": "#/definitions/invitation/definitions/receive_newsletter" } }, "required": [ - "email", - "name" + "password", + "password_confirmation" ], "type": [ "object" ] }, - "title": "Invitation" + "title": "Finalize" } ], "properties": { + "verification_required": { + "$ref": "#/definitions/invitation/definitions/verification_required" + }, "created_at": { "$ref": "#/definitions/invitation/definitions/created_at" }, "user": { "properties": { @@ -5370,43 +5971,10 @@ ] } }, "links": [ { - "description": "Create a new key.", - "href": "/account/keys", - "method": "POST", - "rel": "create", - "schema": { - "properties": { - "public_key": { - "$ref": "#/definitions/key/definitions/public_key" - } - }, - "required": [ - "public_key" - ], - "type": [ - "object" - ] - }, - "targetSchema": { - "$ref": "#/definitions/key" - }, - "title": "Create" - }, - { - "description": "Delete an existing key", - "href": "/account/keys/{(%23%2Fdefinitions%2Fkey%2Fdefinitions%2Fidentity)}", - "method": "DELETE", - "rel": "destroy", - "targetSchema": { - "$ref": "#/definitions/key" - }, - "title": "Delete" - }, - { "description": "Info for existing key.", "href": "/account/keys/{(%23%2Fdefinitions%2Fkey%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { @@ -5453,31 +6021,31 @@ "$ref": "#/definitions/key/definitions/updated_at" } } }, "log-drain": { - "description": "[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 addons will add a log drain when they are provisioned to an app. These drains can only be removed by removing the add-on.", + "description": "[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.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, "title": "Heroku Platform API - Log Drain", "type": [ "object" ], "definitions": { "addon": { - "description": "addon that created the drain", + "description": "add-on that created the drain", "example": { "id": "01234567-89ab-cdef-0123-456789abcdef", "name": "singing-swiftly-1242" }, "properties": { "id": { - "$ref": "#/definitions/addon/definitions/id" + "$ref": "#/definitions/add-on/definitions/id" }, "name": { - "$ref": "#/definitions/addon/definitions/name" + "$ref": "#/definitions/add-on/definitions/name" } }, "readOnly": true, "type": [ "object", @@ -5500,20 +6068,30 @@ "readOnly": true, "type": [ "string" ] }, - "identity": { + "query_identity": { "anyOf": [ { "$ref": "#/definitions/log-drain/definitions/id" }, { "$ref": "#/definitions/log-drain/definitions/url" + }, + { + "$ref": "#/definitions/log-drain/definitions/token" } ] }, + "identity": { + "anyOf": [ + { + "$ref": "#/definitions/log-drain/definitions/url" + } + ] + }, "token": { "description": "token associated with the log drain", "example": "d.01234567-89ab-cdef-0123-456789abcdef", "readOnly": true, "type": [ @@ -5562,21 +6140,21 @@ }, "title": "Create" }, { "description": "Delete an existing log drain. Log drains added by add-ons can only be removed by removing the add-on.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/log-drains/{(%23%2Fdefinitions%2Flog-drain%2Fdefinitions%2Fidentity)}", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/log-drains/{(%23%2Fdefinitions%2Flog-drain%2Fdefinitions%2Fquery_identity)}", "method": "DELETE", "rel": "destroy", "targetSchema": { "$ref": "#/definitions/log-drain" }, "title": "Delete" }, { "description": "Info for existing log drain.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/log-drains/{(%23%2Fdefinitions%2Flog-drain%2Fdefinitions%2Fidentity)}", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/log-drains/{(%23%2Fdefinitions%2Flog-drain%2Fdefinitions%2Fquery_identity)}", "method": "GET", "rel": "self", "targetSchema": { "$ref": "#/definitions/log-drain" }, @@ -6495,11 +7073,11 @@ "object" ] } } }, - "organization-addon": { + "organization-add-on": { "$schema": "http://json-schema.org/draft-04/hyper-schema", "description": "A list of add-ons the Organization uses across all apps", "stability": "production", "title": "Heroku Platform API - Organization Add-on", "type": [ @@ -6511,11 +7089,11 @@ "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/addons", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/addon" + "$ref": "#/definitions/add-on" }, "type": [ "array" ] }, @@ -6645,10 +7223,13 @@ "description": "identity of collaborated account", "properties": { "email": { "$ref": "#/definitions/account/definitions/email" }, + "federated": { + "$ref": "#/definitions/account/definitions/federated" + }, "id": { "$ref": "#/definitions/account/definitions/id" } }, "strictProperties": true, @@ -6952,10 +7533,336 @@ "web_url": { "$ref": "#/definitions/app/definitions/web_url" } } }, + "organization-feature": { + "description": "An organization feature represents a feature enabled on an organization account.", + "$schema": "http://json-schema.org/draft-04/hyper-schema", + "stability": "prototype", + "strictProperties": true, + "title": "Heroku Platform API - Organization Feature", + "type": [ + "object" + ], + "definitions": { + "created_at": { + "description": "when organization feature was created", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + }, + "description": { + "description": "description of organization feature", + "example": "Causes account to example.", + "readOnly": true, + "type": [ + "string" + ] + }, + "doc_url": { + "description": "documentation URL of organization feature", + "example": "http://devcenter.heroku.com/articles/example", + "readOnly": true, + "type": [ + "string" + ] + }, + "enabled": { + "description": "whether or not account feature has been enabled", + "example": true, + "readOnly": false, + "type": [ + "boolean" + ] + }, + "id": { + "description": "unique identifier of organization feature", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, + "identity": { + "anyOf": [ + { + "$ref": "#/definitions/organization-feature/definitions/id" + }, + { + "$ref": "#/definitions/organization-feature/definitions/name" + } + ] + }, + "name": { + "description": "unique name of organization feature", + "example": "name", + "readOnly": true, + "type": [ + "string" + ] + }, + "state": { + "description": "state of organization feature", + "example": "public", + "readOnly": true, + "type": [ + "string" + ] + }, + "updated_at": { + "description": "when organization feature was updated", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + } + }, + "links": [ + { + "description": "Info for an existing account feature.", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/features/{(%23%2Fdefinitions%2Forganization-feature%2Fdefinitions%2Fidentity)}", + "method": "GET", + "rel": "self", + "targetSchema": { + "$ref": "#/definitions/organization-feature" + }, + "title": "Info" + }, + { + "description": "List existing organization features.", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/features", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/organization-feature" + }, + "type": [ + "array" + ] + }, + "title": "List" + } + ], + "properties": { + "created_at": { + "$ref": "#/definitions/account-feature/definitions/created_at" + }, + "description": { + "$ref": "#/definitions/account-feature/definitions/description" + }, + "doc_url": { + "$ref": "#/definitions/account-feature/definitions/doc_url" + }, + "enabled": { + "$ref": "#/definitions/account-feature/definitions/enabled" + }, + "id": { + "$ref": "#/definitions/account-feature/definitions/id" + }, + "name": { + "$ref": "#/definitions/account-feature/definitions/name" + }, + "state": { + "$ref": "#/definitions/account-feature/definitions/state" + }, + "updated_at": { + "$ref": "#/definitions/account-feature/definitions/updated_at" + } + } + }, + "organization-invitation": { + "description": "An organization invitation represents an invite to an organization.", + "$schema": "http://json-schema.org/draft-04/hyper-schema", + "stability": "prototype", + "strictProperties": true, + "title": "Heroku Platform API - Organization Invitation", + "type": [ + "object" + ], + "definitions": { + "created_at": { + "description": "when invitation was created", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + }, + "identity": { + "anyOf": [ + { + "$ref": "#/definitions/organization-invitation/definitions/id" + } + ] + }, + "id": { + "description": "Unique identifier of an invitation", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, + "token": { + "description": "Special token for invitation", + "example": "614ae25aa2d4802096cd7c18625b526c", + "readOnly": true, + "type": [ + "string" + ] + }, + "updated_at": { + "description": "when invitation was updated", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + } + }, + "links": [ + { + "description": "Get a list of an organization's Identity Providers", + "title": "List", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fname)}/invitations", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/organization-invitation" + }, + "type": [ + "array" + ] + } + }, + { + "description": "Create Organization Invitation", + "title": "Create", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/invitations", + "method": "PUT", + "rel": "update", + "schema": { + "properties": { + "email": { + "$ref": "#/definitions/account/definitions/email" + }, + "role": { + "$ref": "#/definitions/organization/definitions/role" + } + }, + "required": [ + "email", + "role" + ], + "type": [ + "object" + ] + } + }, + { + "description": "Revoke an organization invitation.", + "title": "Revoke", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/invitations/{(%23%2Fdefinitions%2Forganization-invitation%2Fdefinitions%2Fidentity)}", + "method": "DELETE", + "rel": "self" + }, + { + "description": "Get an invitation by its token", + "title": "Get", + "href": "/organizations/invitations/{(%23%2Fdefinitions%2Forganization-invitation%2Fdefinitions%2Ftoken)}", + "method": "GET", + "rel": "instances", + "targetSchema": { + "$ref": "#/definitions/organization-invitation" + } + }, + { + "description": "Accept Organization Invitation", + "title": "Accept", + "href": "/organizations/invitations/{(%23%2Fdefinitions%2Forganization-invitation%2Fdefinitions%2Ftoken)}/accept", + "method": "POST", + "rel": "create", + "targetSchema": { + "$ref": "#/definitions/organization-member" + } + } + ], + "properties": { + "created_at": { + "$ref": "#/definitions/organization-invitation/definitions/created_at" + }, + "id": { + "$ref": "#/definitions/organization-invitation/definitions/id" + }, + "invited_by": { + "properties": { + "email": { + "$ref": "#/definitions/account/definitions/email" + }, + "id": { + "$ref": "#/definitions/account/definitions/id" + }, + "name": { + "$ref": "#/definitions/account/definitions/name" + } + }, + "strictProperties": true, + "type": [ + "object" + ] + }, + "organization": { + "properties": { + "id": { + "$ref": "#/definitions/organization/definitions/id" + }, + "name": { + "$ref": "#/definitions/organization/definitions/name" + } + }, + "strictProperties": true, + "type": [ + "object" + ] + }, + "role": { + "$ref": "#/definitions/organization/definitions/role" + }, + "updated_at": { + "$ref": "#/definitions/organization-invitation/definitions/updated_at" + }, + "user": { + "properties": { + "email": { + "$ref": "#/definitions/account/definitions/email" + }, + "id": { + "$ref": "#/definitions/account/definitions/id" + }, + "name": { + "$ref": "#/definitions/account/definitions/name" + } + }, + "strictProperties": true, + "type": [ + "object" + ] + } + } + }, "organization-invoice": { "$schema": "http://json-schema.org/draft-04/hyper-schema", "description": "An organization invoice is an itemized bill of goods for an organization which includes pricing and charges.", "stability": "prototype", "strictProperties": true, @@ -6963,11 +7870,11 @@ "type": [ "object" ], "definitions": { "addons_total": { - "description": "total addons charges in on this invoice", + "description": "total add-ons charges in on this invoice", "example": 25000, "readOnly": true, "type": [ "integer" ] @@ -7187,10 +8094,11 @@ "stability": "prototype", "additionalProperties": false, "required": [ "created_at", "email", + "federated", "updated_at" ], "title": "Heroku Platform API - Organization Member", "type": [ "object" @@ -7211,20 +8119,46 @@ "readOnly": true, "type": [ "string" ] }, + "federated": { + "description": "whether the user is federated and belongs to an Identity Provider", + "example": false, + "readOnly": true, + "type": [ + "boolean" + ] + }, + "id": { + "description": "unique identifier of organization member", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, "identity": { "anyOf": [ { "$ref": "#/definitions/organization-member/definitions/email" }, { - "$ref": "#/definitions/app/definitions/id" + "$ref": "#/definitions/organization-member/definitions/id" } ] }, + "name": { + "description": "full name of the organization member", + "example": "Tina Edmonds", + "readOnly": true, + "type": [ + "string", + "null" + ] + }, "two_factor_authentication": { "description": "whether the Enterprise organization member has two factor authentication enabled", "example": true, "readOnly": true, "type": [ @@ -7250,10 +8184,13 @@ "schema": { "properties": { "email": { "$ref": "#/definitions/organization-member/definitions/email" }, + "federated": { + "$ref": "#/definitions/organization-member/definitions/federated" + }, "role": { "$ref": "#/definitions/organization/definitions/role" } }, "required": [ @@ -7268,10 +8205,70 @@ "$ref": "#/definitions/organization-member" }, "title": "Create or Update" }, { + "description": "Create a new organization member.", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/members", + "method": "POST", + "rel": "create", + "schema": { + "properties": { + "email": { + "$ref": "#/definitions/organization-member/definitions/email" + }, + "federated": { + "$ref": "#/definitions/organization-member/definitions/federated" + }, + "role": { + "$ref": "#/definitions/organization/definitions/role" + } + }, + "required": [ + "email", + "role" + ], + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/organization-member" + }, + "title": "Create" + }, + { + "description": "Update an organization member.", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/members", + "method": "PATCH", + "rel": "update", + "schema": { + "properties": { + "email": { + "$ref": "#/definitions/organization-member/definitions/email" + }, + "federated": { + "$ref": "#/definitions/organization-member/definitions/federated" + }, + "role": { + "$ref": "#/definitions/organization/definitions/role" + } + }, + "required": [ + "email", + "role" + ], + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/organization-member" + }, + "title": "update" + }, + { "description": "Remove a member from the organization.", "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/members/{(%23%2Fdefinitions%2Forganization-member%2Fdefinitions%2Fidentity)}", "method": "DELETE", "rel": "destroy", "targetSchema": { @@ -7281,29 +8278,53 @@ }, { "description": "List members of the organization.", "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/members", "method": "GET", + "ranges": [ + "email" + ], "rel": "instances", "targetSchema": { "items": { "$ref": "#/definitions/organization-member" }, "type": [ "array" ] }, "title": "List" + }, + { + "description": "List the apps of a member.", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/members/{(%23%2Fdefinitions%2Forganization-member%2Fdefinitions%2Fidentity)}/apps", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/organization-app" + }, + "type": [ + "array" + ] + }, + "title": "List" } ], "properties": { "created_at": { "$ref": "#/definitions/organization-member/definitions/created_at" }, "email": { "$ref": "#/definitions/organization-member/definitions/email" }, + "federated": { + "$ref": "#/definitions/organization-member/definitions/federated" + }, + "id": { + "$ref": "#/definitions/organization-member/definitions/id" + }, "role": { "$ref": "#/definitions/organization/definitions/role" }, "two_factor_authentication": { "$ref": "#/definitions/organization-member/definitions/two_factor_authentication" @@ -7317,282 +8338,47 @@ "email": { "$ref": "#/definitions/account/definitions/email" }, "id": { "$ref": "#/definitions/account/definitions/id" + }, + "name": { + "$ref": "#/definitions/account/definitions/name" } }, "strictProperties": true, "type": [ "object" ] } } }, - "organization-payment-method": { + "organization-preferences": { + "description": "Tracks an organization's preferences", "$schema": "http://json-schema.org/draft-04/hyper-schema", - "description": "The on file payment method for an account", "stability": "prototype", - "title": "Heroku Vault API - Payment Method", + "strictProperties": true, + "title": "Heroku Platform API - Organization Preferences", "type": [ "object" ], "definitions": { - "address_1": { - "type": [ - "string" + "default-permission": { + "description": "The default permission used when adding new members to the organization", + "example": "member", + "readOnly": false, + "enum": [ + "admin", + "member", + "viewer", + null ], - "description": "street address line 1", - "example": "40 Hickory Lane" - }, - "address_2": { "type": [ + "null", "string" - ], - "description": "street address line 2", - "example": "Suite 103" - }, - "card_number": { - "type": [ - "string" - ], - "description": "encrypted card number of payment method", - "example": "encrypted-card-number" - }, - "city": { - "type": [ - "string" - ], - "description": "city", - "example": "San Francisco" - }, - "country": { - "type": [ - "string" - ], - "description": "country", - "example": "US" - }, - "cvv": { - "type": [ - "string" - ], - "description": "card verification value", - "example": "123" - }, - "expiration_month": { - "type": [ - "string" - ], - "description": "expiration month", - "example": "11" - }, - "expiration_year": { - "type": [ - "string" - ], - "description": "expiration year", - "example": "2014" - }, - "first_name": { - "type": [ - "string" - ], - "description": "the first name for payment method", - "example": "Jason" - }, - "last_name": { - "type": [ - "string" - ], - "description": "the last name for payment method", - "example": "Walker" - }, - "other": { - "type": [ - "string" - ], - "description": "metadata", - "example": "Additional information for payment method" - }, - "postal_code": { - "type": [ - "string" - ], - "description": "postal code", - "example": "90210" - }, - "state": { - "type": [ - "string" - ], - "description": "state", - "example": "CA" - }, - "card_last4": { - "type": [ - "string" - ], - "description": "last 4 digits of credit card number", - "example": "1234", - "readOnly": true - }, - "card_type": { - "type": [ - "string" - ], - "description": "name of credit card issuer", - "example": "VISA", - "readOnly": true - }, - "heroku_id": { - "type": [ - "string" - ], - "description": "heroku_id identifier reference", - "example": "user930223902@heroku.com", - "readOnly": true - }, - "identity": { - "anyOf": [ - { - "$ref": "#/definitions/invoice-address/definitions/heroku_id" - } ] - } - }, - "links": [ - { - "description": "Update an existing payment method for an account.", - "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/payment-method", - "method": "PATCH", - "rel": "update", - "schema": { - "properties": { - "address_1": { - "$ref": "#/definitions/organization-payment-method/definitions/address_1" - }, - "address_2": { - "$ref": "#/definitions/organization-payment-method/definitions/address_2" - }, - "card_number": { - "$ref": "#/definitions/organization-payment-method/definitions/card_number" - }, - "city": { - "$ref": "#/definitions/organization-payment-method/definitions/city" - }, - "country": { - "$ref": "#/definitions/organization-payment-method/definitions/country" - }, - "cvv": { - "$ref": "#/definitions/organization-payment-method/definitions/cvv" - }, - "expiration_month": { - "$ref": "#/definitions/organization-payment-method/definitions/expiration_month" - }, - "expiration_year": { - "$ref": "#/definitions/organization-payment-method/definitions/expiration_year" - }, - "first_name": { - "$ref": "#/definitions/organization-payment-method/definitions/first_name" - }, - "last_name": { - "$ref": "#/definitions/organization-payment-method/definitions/last_name" - }, - "other": { - "$ref": "#/definitions/organization-payment-method/definitions/other" - }, - "postal_code": { - "$ref": "#/definitions/organization-payment-method/definitions/postal_code" - }, - "state": { - "$ref": "#/definitions/organization-payment-method/definitions/state" - } - }, - "required": [ - "address_1", - "address_2", - "card_number", - "city", - "country", - "cvv", - "expiration_month", - "expiration_year", - "first_name", - "last_name", - "postal_code", - "state" - ], - "type": [ - "object" - ] - }, - "title": "update" }, - { - "description": "Get the current payment method for an account.", - "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/payment-method", - "method": "GET", - "rel": "self", - "targetSchema": { - "$ref": "#/definitions/organization-payment-method" - }, - "title": "get" - } - ], - "properties": { - "address_1": { - "$ref": "#/definitions/organization-payment-method/definitions/address_1" - }, - "address_2": { - "$ref": "#/definitions/organization-payment-method/definitions/address_2" - }, - "card_last4": { - "$ref": "#/definitions/organization-payment-method/definitions/card_last4" - }, - "card_type": { - "$ref": "#/definitions/organization-payment-method/definitions/card_type" - }, - "city": { - "$ref": "#/definitions/organization-payment-method/definitions/city" - }, - "country": { - "$ref": "#/definitions/organization-payment-method/definitions/country" - }, - "expiration_month": { - "$ref": "#/definitions/organization-payment-method/definitions/expiration_month" - }, - "expiration_year": { - "$ref": "#/definitions/organization-payment-method/definitions/expiration_year" - }, - "first_name": { - "$ref": "#/definitions/organization-payment-method/definitions/first_name" - }, - "last_name": { - "$ref": "#/definitions/organization-payment-method/definitions/last_name" - }, - "other": { - "$ref": "#/definitions/organization-payment-method/definitions/other" - }, - "postal_code": { - "$ref": "#/definitions/organization-payment-method/definitions/postal_code" - }, - "state": { - "$ref": "#/definitions/organization-payment-method/definitions/state" - } - } - }, - "organization-preferences": { - "description": "Tracks an organization's preferences", - "$schema": "http://json-schema.org/draft-04/hyper-schema", - "stability": "prototype", - "strictProperties": true, - "title": "Heroku Platform API - Organization Preferences", - "type": [ - "object" - ], - "definitions": { "identity": { "$ref": "#/definitions/organization/definitions/identity" }, "whitelisting-enabled": { "description": "Whether whitelisting rules should be applied to add-on installations", @@ -7632,10 +8418,13 @@ }, "title": "Update" } ], "properties": { + "default-permission": { + "$ref": "#/definitions/organization-preferences/definitions/default-permission" + }, "whitelisting-enabled": { "$ref": "#/definitions/organization-preferences/definitions/whitelisting-enabled" } } }, @@ -7685,13 +8474,116 @@ }, "identity": { "anyOf": [ { "$ref": "#/definitions/organization/definitions/name" + }, + { + "$ref": "#/definitions/organization/definitions/id" } ] }, + "address_1": { + "type": [ + "string" + ], + "description": "street address line 1", + "example": "40 Hickory Lane" + }, + "address_2": { + "type": [ + "string" + ], + "description": "street address line 2", + "example": "Suite 103" + }, + "card_number": { + "type": [ + "string" + ], + "description": "encrypted card number of payment method", + "example": "encrypted-card-number" + }, + "city": { + "type": [ + "string" + ], + "description": "city", + "example": "San Francisco" + }, + "country": { + "type": [ + "string" + ], + "description": "country", + "example": "US" + }, + "cvv": { + "type": [ + "string" + ], + "description": "card verification value", + "example": "123" + }, + "expiration_month": { + "type": [ + "string" + ], + "description": "expiration month", + "example": "11" + }, + "expiration_year": { + "type": [ + "string" + ], + "description": "expiration year", + "example": "2014" + }, + "first_name": { + "type": [ + "string" + ], + "description": "the first name for payment method", + "example": "Jason" + }, + "last_name": { + "type": [ + "string" + ], + "description": "the last name for payment method", + "example": "Walker" + }, + "other": { + "type": [ + "string" + ], + "description": "metadata", + "example": "Additional information for payment method" + }, + "postal_code": { + "type": [ + "string" + ], + "description": "postal code", + "example": "90210" + }, + "state": { + "type": [ + "string" + ], + "description": "state", + "example": "CA" + }, + "membership_limit": { + "description": "upper limit of members allowed in an organization.", + "example": 25, + "readOnly": true, + "type": [ + "number", + "null" + ] + }, "name": { "description": "unique name of organization", "example": "example", "readOnly": true, "type": [ @@ -7720,10 +8612,22 @@ "type": [ "null", "string" ] }, + "type": { + "description": "type of organization.", + "example": "team", + "enum": [ + "enterprise", + "team" + ], + "readOnly": true, + "type": [ + "string" + ] + }, "updated_at": { "description": "when the organization was updated", "example": "2012-01-01T12:00:00Z", "format": "date-time", "readOnly": true, @@ -7754,134 +8658,138 @@ "method": "GET", "rel": "self", "title": "Info" }, { - "description": "Set or unset the organization as your default organization.", + "description": "Update organization properties.", "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}", "method": "PATCH", "rel": "update", "schema": { "properties": { "default": { "$ref": "#/definitions/organization/definitions/default" + }, + "name": { + "$ref": "#/definitions/organization/definitions/name" } }, "type": [ "object" ] }, "targetSchema": { "$ref": "#/definitions/organization" }, "title": "Update" + }, + { + "description": "Create a new organization.", + "href": "/organizations", + "method": "POST", + "rel": "create", + "schema": { + "properties": { + "name": { + "$ref": "#/definitions/organization/definitions/name" + }, + "address_1": { + "$ref": "#/definitions/organization/definitions/address_1" + }, + "address_2": { + "$ref": "#/definitions/organization/definitions/address_2" + }, + "card_number": { + "$ref": "#/definitions/organization/definitions/card_number" + }, + "city": { + "$ref": "#/definitions/organization/definitions/city" + }, + "country": { + "$ref": "#/definitions/organization/definitions/country" + }, + "cvv": { + "$ref": "#/definitions/organization/definitions/cvv" + }, + "expiration_month": { + "$ref": "#/definitions/organization/definitions/expiration_month" + }, + "expiration_year": { + "$ref": "#/definitions/organization/definitions/expiration_year" + }, + "first_name": { + "$ref": "#/definitions/organization/definitions/first_name" + }, + "last_name": { + "$ref": "#/definitions/organization/definitions/last_name" + }, + "other": { + "$ref": "#/definitions/organization/definitions/other" + }, + "postal_code": { + "$ref": "#/definitions/organization/definitions/postal_code" + }, + "state": { + "$ref": "#/definitions/organization/definitions/state" + } + }, + "required": [ + "name" + ], + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/organization" + }, + "title": "Create" + }, + { + "description": "Delete an existing organization.", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}", + "method": "DELETE", + "rel": "destroy", + "targetSchema": { + "$ref": "#/definitions/organization" + }, + "title": "Delete" } ], "properties": { + "id": { + "$ref": "#/definitions/organization/definitions/id" + }, "created_at": { "$ref": "#/definitions/organization/definitions/created_at" }, "credit_card_collections": { "$ref": "#/definitions/organization/definitions/credit_card_collections" }, "default": { "$ref": "#/definitions/organization/definitions/default" }, + "membership_limit": { + "$ref": "#/definitions/organization/definitions/membership_limit" + }, "name": { "$ref": "#/definitions/organization/definitions/name" }, "provisioned_licenses": { "$ref": "#/definitions/organization/definitions/provisioned_licenses" }, "role": { "$ref": "#/definitions/organization/definitions/role" }, + "type": { + "$ref": "#/definitions/organization/definitions/type" + }, "updated_at": { "$ref": "#/definitions/organization/definitions/updated_at" } } }, - "otp-secret": { - "description": "This renders a secret that clients can use to build a one-time password to be supplied as a 2nd factor of authentication.", - "$schema": "http://json-schema.org/draft-04/hyper-schema", - "stability": "development", - "strictProperties": true, - "title": "Heroku Platform API - OTP Secret", - "type": [ - "object" - ], - "definitions": { - "created_at": { - "description": "when OTP secret was created", - "example": "2012-01-01T12:00:00Z", - "format": "date-time", - "readOnly": true, - "type": [ - "string" - ] - }, - "id": { - "description": "unique identifier of OTP secret", - "example": "01234567-89ab-cdef-0123-456789abcdef", - "format": "uuid", - "readOnly": true, - "type": [ - "string" - ] - }, - "identity": { - "anyOf": [ - { - "$ref": "#/definitions/otp-secret/definitions/id" - } - ] - }, - "updated_at": { - "description": "when OTP secret was updated", - "example": "2012-01-01T12:00:00Z", - "format": "date-time", - "readOnly": true, - "type": [ - "string" - ] - }, - "url": { - "description": "OTP secret rendered in URL format", - "example": "otpauth://totp/username@example.com?issuer=Heroku&secret=abcd1234", - "readOnly": true, - "type": [ - "string" - ] - } - }, - "links": [ - { - "description": "Create new OTP secret. This invalidates any existing OTP secrets on the account.", - "href": "/account/otp-secret", - "method": "POST", - "rel": "create", - "targetSchema": { - "$ref": "#/definitions/otp-secret" - }, - "title": "Create" - } - ], - "properties": { - "created_at": { - "$ref": "#/definitions/otp-secret/definitions/created_at" - }, - "id": { - "$ref": "#/definitions/otp-secret/definitions/id" - }, - "updated_at": { - "$ref": "#/definitions/otp-secret/definitions/updated_at" - }, - "url": { - "$ref": "#/definitions/otp-secret/definitions/url" - } - } - }, "outbound-ruleset": { "description": "An outbound-ruleset is a collection of rules that specify what hosts Dynos are allowed to communicate with. ", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "prototype", "strictProperties": true, @@ -8147,422 +9055,66 @@ "object" ] } } }, - "payment-method": { + "organization-app-permission": { "$schema": "http://json-schema.org/draft-04/hyper-schema", - "description": "The on file payment method for an account", + "description": "An organization app permission is a behavior that is assigned to a user in an organization app.", "stability": "prototype", - "title": "Heroku Vault API - Payment Method", + "title": "Heroku Platform API - Organization App Permission", "type": [ "object" ], "definitions": { - "address_1": { - "type": [ - "string" - ], - "description": "street address line 1", - "example": "40 Hickory Lane" - }, - "address_2": { - "type": [ - "string" - ], - "description": "street address line 2", - "example": "Suite 103" - }, - "card_number": { - "type": [ - "string" - ], - "description": "encrypted card number of payment method", - "example": "encrypted-card-number" - }, - "city": { - "type": [ - "string" - ], - "description": "city", - "example": "San Francisco" - }, - "country": { - "type": [ - "string" - ], - "description": "country", - "example": "US" - }, - "cvv": { - "type": [ - "string" - ], - "description": "card verification value", - "example": "123" - }, - "expiration_month": { - "type": [ - "string" - ], - "description": "expiration month", - "example": "11" - }, - "expiration_year": { - "type": [ - "string" - ], - "description": "expiration year", - "example": "2014" - }, - "first_name": { - "type": [ - "string" - ], - "description": "the first name for payment method", - "example": "Jason" - }, - "last_name": { - "type": [ - "string" - ], - "description": "the last name for payment method", - "example": "Walker" - }, - "other": { - "type": [ - "string" - ], - "description": "metadata", - "example": "Additional information for payment method" - }, - "postal_code": { - "type": [ - "string" - ], - "description": "postal code", - "example": "90210" - }, - "state": { - "type": [ - "string" - ], - "description": "state", - "example": "CA" - }, - "card_last4": { - "type": [ - "string" - ], - "description": "last 4 digits of credit card number", - "example": "1234", - "readOnly": true - }, - "card_type": { - "type": [ - "string" - ], - "description": "name of credit card issuer", - "example": "VISA", - "readOnly": true - }, - "heroku_id": { - "type": [ - "string" - ], - "description": "heroku_id identifier reference", - "example": "user930223902@heroku.com", - "readOnly": true - }, "identity": { "anyOf": [ { - "$ref": "#/definitions/invoice-address/definitions/heroku_id" + "$ref": "#/definitions/organization-app-permission/definitions/name" } ] - } - }, - "links": [ - { - "description": "Update an existing payment method for an account.", - "href": "/account/payment-method", - "method": "PATCH", - "rel": "update", - "schema": { - "properties": { - "address_1": { - "$ref": "#/definitions/payment-method/definitions/address_1" - }, - "address_2": { - "$ref": "#/definitions/payment-method/definitions/address_2" - }, - "card_number": { - "$ref": "#/definitions/payment-method/definitions/card_number" - }, - "city": { - "$ref": "#/definitions/payment-method/definitions/city" - }, - "country": { - "$ref": "#/definitions/payment-method/definitions/country" - }, - "cvv": { - "$ref": "#/definitions/payment-method/definitions/cvv" - }, - "expiration_month": { - "$ref": "#/definitions/payment-method/definitions/expiration_month" - }, - "expiration_year": { - "$ref": "#/definitions/payment-method/definitions/expiration_year" - }, - "first_name": { - "$ref": "#/definitions/payment-method/definitions/first_name" - }, - "last_name": { - "$ref": "#/definitions/payment-method/definitions/last_name" - }, - "other": { - "$ref": "#/definitions/payment-method/definitions/other" - }, - "postal_code": { - "$ref": "#/definitions/payment-method/definitions/postal_code" - }, - "state": { - "$ref": "#/definitions/payment-method/definitions/state" - } - }, - "required": [ - "address_1", - "address_2", - "card_number", - "city", - "country", - "cvv", - "expiration_month", - "expiration_year", - "first_name", - "last_name", - "postal_code", - "state" - ], - "type": [ - "object" - ] - }, - "title": "update" }, - { - "description": "Get the current payment method for an account.", - "href": "/account/payment-method", - "method": "GET", - "rel": "self", - "targetSchema": { - "$ref": "#/definitions/payment-method" - }, - "title": "get" - } - ], - "properties": { - "address_1": { - "$ref": "#/definitions/payment-method/definitions/address_1" - }, - "address_2": { - "$ref": "#/definitions/payment-method/definitions/address_2" - }, - "card_last4": { - "$ref": "#/definitions/payment-method/definitions/card_last4" - }, - "card_type": { - "$ref": "#/definitions/payment-method/definitions/card_type" - }, - "city": { - "$ref": "#/definitions/payment-method/definitions/city" - }, - "country": { - "$ref": "#/definitions/payment-method/definitions/country" - }, - "expiration_month": { - "$ref": "#/definitions/payment-method/definitions/expiration_month" - }, - "expiration_year": { - "$ref": "#/definitions/payment-method/definitions/expiration_year" - }, - "first_name": { - "$ref": "#/definitions/payment-method/definitions/first_name" - }, - "last_name": { - "$ref": "#/definitions/payment-method/definitions/last_name" - }, - "other": { - "$ref": "#/definitions/payment-method/definitions/other" - }, - "postal_code": { - "$ref": "#/definitions/payment-method/definitions/postal_code" - }, - "state": { - "$ref": "#/definitions/payment-method/definitions/state" - } - } - }, - "payment": { - "$schema": "http://json-schema.org/draft-04/hyper-schema", - "description": "A payment represents money collected for an account", - "title": "Heroku Vault API - Payments", - "stability": "prototype", - "type": [ - "object" - ], - "definitions": { - "account_id": { - "type": [ - "integer" - ], - "description": "account that payment belongs to", - "example": 8403923, - "readOnly": true - }, - "amount": { - "type": [ - "number" - ], - "description": "amount of payment in cents", - "example": 50000, - "readOnly": false - }, - "created_at": { - "description": "when payment was created", - "example": "2012-01-01T12:00:00Z", - "format": "date-time", + "name": { + "description": "The name of the app permission.", + "example": "view", "readOnly": true, "type": [ "string" ] }, - "id": { - "type": [ - "integer" - ], - "description": "legacy unique identifier of payment", - "example": 9403943, - "readOnly": true - }, - "identity": { - "anyOf": [ - { - "$ref": "#/definitions/payment/definitions/id" - } - ] - }, - "state": { - "enum": [ - "failure", - "pending", - "success" - ], - "type": [ - "string" - ], - "description": "state of the payment", - "example": "pending", - "readOnly": true - }, - "updated_at": { - "description": "when credit was updated", - "example": "2012-01-01T12:00:00Z", - "format": "date-time", + "description": { + "description": "A description of what the app permission allows.", + "example": "Can manage config, deploy, run commands and restart the app.", "readOnly": true, "type": [ "string" ] - }, - "uuid": { - "description": "unique identifier for a payment transaction", - "example": "01234567-89ab-cdef-0123-456789abcdef", - "format": "uuid", - "readOnly": false, - "type": [ - "string" - ] } }, "links": [ { - "description": "Create a payment on an existing account", - "href": "/account/payments", - "method": "POST", - "rel": "self", - "schema": { - "properties": { - "amount": { - "$ref": "#/definitions/payment/definitions/amount" - }, - "invoice": { - "$ref": "#/definitions/invoice/definitions/identity" - }, - "uuid": { - "$ref": "#/definitions/payment/definitions/uuid" - } + "description": "Lists permissions available to organizations.", + "href": "/organizations/permissions", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/organization-app-permission" }, - "required": [ - "amount", - "invoice", - "uuid" - ], "type": [ - "object" + "array" ] }, - "targetSchema": { - "$ref": "#/definitions/payment" - }, - "title": "create" + "title": "List" } ], "properties": { - "amount": { - "$ref": "#/definitions/payment/definitions/amount" + "name": { + "$ref": "#/definitions/organization-app-permission/definitions/name" }, - "created_at": { - "$ref": "#/definitions/payment/definitions/created_at" - }, - "id": { - "$ref": "#/definitions/payment/definitions/id" - }, - "invoice": { - "description": "identity of invoice", - "properties": { - "id": { - "$ref": "#/definitions/invoice/definitions/id" - }, - "number": { - "$ref": "#/definitions/invoice/definitions/number" - } - }, - "type": [ - "null", - "object" - ] - }, - "updated_at": { - "$ref": "#/definitions/payment/definitions/updated_at" - }, - "user": { - "description": "identity of user issuing payment", - "properties": { - "email": { - "$ref": "#/definitions/account/definitions/email" - }, - "id": { - "$ref": "#/definitions/account/definitions/id" - } - }, - "strictProperties": true, - "type": [ - "object" - ] - }, - "state": { - "$ref": "#/definitions/payment/definitions/state" + "description": { + "$ref": "#/definitions/organization-app-permission/definitions/description" } } }, "pipeline-coupling": { "description": "Information about an app's coupling to a pipeline", @@ -8600,10 +9152,11 @@ }, "stage": { "description": "target pipeline stage", "example": "production", "enum": [ + "test", "review", "development", "staging", "production" ], @@ -9248,12 +9801,26 @@ "readOnly": true, "type": [ "string" ] }, + "compliance": { + "description": "the compliance regimes applied to an add-on plan", + "example": [ + "HIPAA" + ], + "readOnly": false, + "type": [ + "null", + "array" + ], + "items": { + "$ref": "#/definitions/plan/definitions/regime" + } + }, "default": { - "description": "whether this plan is the default for its addon service", + "description": "whether this plan is the default for its add-on service", "example": false, "readOnly": true, "type": [ "boolean" ] @@ -9265,11 +9832,11 @@ "type": [ "string" ] }, "human_name": { - "description": "human readable name of the addon plan", + "description": "human readable name of the add-on plan", "example": "Dev", "readOnly": true, "type": [ "string" ] @@ -9315,10 +9882,22 @@ "readOnly": true, "type": [ "string" ] }, + "regime": { + "description": "compliance requirements an add-on plan must adhere to", + "readOnly": true, + "example": "HIPAA", + "type": [ + "string" + ], + "enum": [ + "HIPAA", + "PCI" + ] + }, "cents": { "description": "price in cents per unit of plan", "example": 0, "readOnly": true, "type": [ @@ -9355,26 +9934,34 @@ "format": "date-time", "readOnly": true, "type": [ "string" ] + }, + "visible": { + "description": "whether this plan is publicly visible", + "example": true, + "readOnly": true, + "type": [ + "boolean" + ] } }, "links": [ { "description": "Info for existing plan.", - "href": "/addon-services/{(%23%2Fdefinitions%2Faddon-service%2Fdefinitions%2Fidentity)}/plans/{(%23%2Fdefinitions%2Fplan%2Fdefinitions%2Fidentity)}", + "href": "/addon-services/{(%23%2Fdefinitions%2Fadd-on-service%2Fdefinitions%2Fidentity)}/plans/{(%23%2Fdefinitions%2Fplan%2Fdefinitions%2Fidentity)}", "method": "GET", "rel": "self", "targetSchema": { "$ref": "#/definitions/plan" }, "title": "Info" }, { "description": "List existing plans.", - "href": "/addon-services/{(%23%2Fdefinitions%2Faddon-service%2Fdefinitions%2Fidentity)}/plans", + "href": "/addon-services/{(%23%2Fdefinitions%2Fadd-on-service%2Fdefinitions%2Fidentity)}/plans", "method": "GET", "rel": "instances", "targetSchema": { "items": { "$ref": "#/definitions/plan" @@ -9389,24 +9976,27 @@ "properties": { "addon_service": { "description": "identity of add-on service", "properties": { "id": { - "$ref": "#/definitions/addon-service/definitions/id" + "$ref": "#/definitions/add-on-service/definitions/id" }, "name": { - "$ref": "#/definitions/addon-service/definitions/name" + "$ref": "#/definitions/add-on-service/definitions/name" } }, "strictProperties": true, "type": [ "object" ] }, "created_at": { "$ref": "#/definitions/plan/definitions/created_at" }, + "compliance": { + "$ref": "#/definitions/plan/definitions/compliance" + }, "default": { "$ref": "#/definitions/plan/definitions/default" }, "description": { "$ref": "#/definitions/plan/definitions/description" @@ -9447,10 +10037,13 @@ "state": { "$ref": "#/definitions/plan/definitions/state" }, "updated_at": { "$ref": "#/definitions/plan/definitions/updated_at" + }, + "visible": { + "$ref": "#/definitions/plan/definitions/visible" } } }, "rate-limit": { "description": "Rate Limit represents the number of request tokens each account holds. Requests to this endpoint do not count towards the rate limit.", @@ -9489,38 +10082,10 @@ "remaining": { "$ref": "#/definitions/rate-limit/definitions/remaining" } } }, - "recovery-code": { - "description": "Recovery codes grant access to accounts with two-factor authentication enabled.", - "$schema": "http://json-schema.org/draft-04/hyper-schema", - "stability": "development", - "strictProperties": true, - "title": "Heroku Platform API - Recovery Code", - "type": [ - "array" - ], - "items": { - "example": "0123456789abcdef", - "type": [ - "string" - ] - }, - "links": [ - { - "description": "Generate new recovery codes. This invalidates any existing codes on the account.", - "href": "/account/recovery-codes", - "method": "POST", - "rel": "create", - "targetSchema": { - "$ref": "#/definitions/recovery-code" - }, - "title": "Create" - } - ] - }, "region": { "description": "A region represents a geographic location in which your application may run.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, @@ -9762,10 +10327,18 @@ "example": 11, "readOnly": true, "type": [ "integer" ] + }, + "current": { + "description": "indicates this release as being the current one for the app", + "example": true, + "readOnly": true, + "type": [ + "boolean" + ] } }, "links": [ { "description": "Info for existing release.", @@ -9841,10 +10414,19 @@ }, "title": "Rollback" } ], "properties": { + "addon_plan_names": { + "description": "add-on plans installed on the app for this release", + "type": [ + "array" + ], + "items": { + "$ref": "#/definitions/plan/definitions/name" + } + }, "app": { "description": "app involved in the release", "properties": { "name": { "$ref": "#/definitions/app/definitions/name" @@ -9880,10 +10462,13 @@ "type": [ "object", "null" ] }, + "status": { + "$ref": "#/definitions/release/definitions/status" + }, "user": { "description": "user that created the release", "properties": { "id": { "$ref": "#/definitions/account/definitions/id" @@ -9897,10 +10482,13 @@ "object" ] }, "version": { "$ref": "#/definitions/release/definitions/version" + }, + "current": { + "$ref": "#/definitions/release/definitions/current" } } }, "slug": { "description": "A slug is a snapshot of your application code that is ready to run on the platform.", @@ -9986,11 +10574,11 @@ "description": "hash mapping process type names to their respective command", "example": { "web": "./bin/web -p $PORT" }, "patternProperties": { - "^\\w+$": { + "^[-\\w]{1,128}$": { "type": [ "string" ] } }, @@ -10208,10 +10796,203 @@ "sms_number": { "$ref": "#/definitions/account/definitions/sms_number" } } }, + "sni-endpoint": { + "description": "SNI Endpoint is a public address serving a custom SSL cert for HTTPS traffic, using the SNI TLS extension, to a Heroku app.", + "$schema": "http://json-schema.org/draft-04/hyper-schema", + "title": "Heroku Platform API - SNI Endpoint", + "stability": "development", + "strictProperties": true, + "type": [ + "object" + ], + "definitions": { + "certificate_chain": { + "description": "raw contents of the public certificate chain (eg: .crt or .pem file)", + "example": "-----BEGIN CERTIFICATE----- ...", + "readOnly": false, + "type": [ + "string" + ] + }, + "cname": { + "description": "deprecated; refer to GET /apps/:id/domains for valid CNAMEs for this app", + "example": "example.herokussl.com", + "readOnly": false, + "type": [ + "string" + ] + }, + "created_at": { + "description": "when endpoint was created", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + }, + "id": { + "description": "unique identifier of this SNI endpoint", + "example": "01234567-89ab-cdef-0123-456789abcdef", + "format": "uuid", + "readOnly": true, + "type": [ + "string" + ] + }, + "identity": { + "anyOf": [ + { + "$ref": "#/definitions/sni-endpoint/definitions/id" + }, + { + "$ref": "#/definitions/sni-endpoint/definitions/name" + } + ] + }, + "name": { + "description": "unique name for SNI endpoint", + "example": "example", + "pattern": "^[a-z][a-z0-9-]{2,29}$", + "readOnly": true, + "type": [ + "string" + ] + }, + "private_key": { + "description": "contents of the private key (eg .key file)", + "example": "-----BEGIN RSA PRIVATE KEY----- ...", + "readOnly": false, + "type": [ + "string" + ] + }, + "updated_at": { + "description": "when SNI endpoint was updated", + "example": "2012-01-01T12:00:00Z", + "format": "date-time", + "readOnly": true, + "type": [ + "string" + ] + } + }, + "links": [ + { + "description": "Create a new SNI endpoint.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sni-endpoints", + "method": "POST", + "rel": "create", + "schema": { + "properties": { + "certificate_chain": { + "$ref": "#/definitions/sni-endpoint/definitions/certificate_chain" + }, + "private_key": { + "$ref": "#/definitions/sni-endpoint/definitions/private_key" + } + }, + "required": [ + "certificate_chain", + "private_key" + ], + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/sni-endpoint" + }, + "title": "Create" + }, + { + "description": "Delete existing SNI endpoint.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sni-endpoints/{(%23%2Fdefinitions%2Fsni-endpoint%2Fdefinitions%2Fidentity)}", + "method": "DELETE", + "rel": "destroy", + "targetSchema": { + "$ref": "#/definitions/sni-endpoint" + }, + "title": "Delete" + }, + { + "description": "Info for existing SNI endpoint.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sni-endpoints/{(%23%2Fdefinitions%2Fsni-endpoint%2Fdefinitions%2Fidentity)}", + "method": "GET", + "rel": "self", + "targetSchema": { + "$ref": "#/definitions/sni-endpoint" + }, + "title": "Info" + }, + { + "description": "List existing SNI endpoints.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sni-endpoints", + "method": "GET", + "rel": "instances", + "targetSchema": { + "items": { + "$ref": "#/definitions/sni-endpoint" + }, + "type": [ + "array" + ] + }, + "title": "List" + }, + { + "description": "Update an existing SNI endpoint.", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sni-endpoints/{(%23%2Fdefinitions%2Fsni-endpoint%2Fdefinitions%2Fidentity)}", + "method": "PATCH", + "rel": "update", + "schema": { + "properties": { + "certificate_chain": { + "$ref": "#/definitions/sni-endpoint/definitions/certificate_chain" + }, + "private_key": { + "$ref": "#/definitions/sni-endpoint/definitions/private_key" + } + }, + "required": [ + "certificate_chain", + "private_key" + ], + "type": [ + "object" + ] + }, + "targetSchema": { + "$ref": "#/definitions/sni-endpoint" + }, + "title": "Update" + } + ], + "properties": { + "certificate_chain": { + "$ref": "#/definitions/sni-endpoint/definitions/certificate_chain" + }, + "cname": { + "$ref": "#/definitions/sni-endpoint/definitions/cname" + }, + "created_at": { + "$ref": "#/definitions/sni-endpoint/definitions/created_at" + }, + "id": { + "$ref": "#/definitions/sni-endpoint/definitions/id" + }, + "name": { + "$ref": "#/definitions/sni-endpoint/definitions/name" + }, + "updated_at": { + "$ref": "#/definitions/sni-endpoint/definitions/updated_at" + } + } + }, "source": { "description": "A source is a location for uploading and downloading an application's source code.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "production", "strictProperties": true, @@ -10238,17 +11019,28 @@ } }, "links": [ { "description": "Create URLs for uploading and downloading source.", - "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sources", + "href": "/sources", "method": "POST", "rel": "create", "targetSchema": { "$ref": "#/definitions/source" }, "title": "Create" + }, + { + "deactivate_on": "2017-08-01", + "description": "Create URLs for uploading and downloading source. Deprecated in favor of `POST /sources`", + "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}/sources", + "method": "POST", + "rel": "create", + "targetSchema": { + "$ref": "#/definitions/source" + }, + "title": "Create - Deprecated" } ], "properties": { "source_blob": { "description": "pointer to the URL where clients can fetch or store the source", @@ -10511,36 +11303,10 @@ "title": "Heroku Platform API - Space", "type": [ "object" ], "definitions": { - "regime": { - "description": "compliance requirements a space must adhere to", - "readOnly": true, - "example": "HIPAA", - "type": [ - "string" - ], - "enum": [ - "HIPAA", - "PCI" - ] - }, - "compliance": { - "description": "the compliance regimes applied to a space", - "example": [ - "HIPAA" - ], - "readOnly": false, - "type": [ - "null", - "array" - ], - "items": { - "$ref": "#/definitions/space/definitions/regime" - } - }, "created_at": { "description": "when space was created", "example": "2012-01-01T12:00:00Z", "format": "date-time", "readOnly": true, @@ -10574,10 +11340,18 @@ "pattern": "^[a-z0-9](?:[a-z0-9]|-(?!-))+[a-z0-9]$", "type": [ "string" ] }, + "shield": { + "description": "true if this space has shield enabled", + "readOnly": true, + "example": true, + "type": [ + "boolean" + ] + }, "state": { "description": "availability of this space", "enum": [ "allocating", "allocated", @@ -10663,19 +11437,23 @@ "schema": { "properties": { "name": { "$ref": "#/definitions/space/definitions/name" }, + "organization": { + "$ref": "#/definitions/organization/definitions/name" + }, "region": { "$ref": "#/definitions/region/definitions/identity" }, - "compliance": { - "$ref": "#/definitions/space/definitions/compliance" + "shield": { + "$ref": "#/definitions/space/definitions/shield" } }, "required": [ - "name" + "name", + "organization" ], "type": [ "object" ] }, @@ -10684,13 +11462,10 @@ }, "title": "Create" } ], "properties": { - "compliance": { - "$ref": "#/definitions/space/definitions/compliance" - }, "created_at": { "$ref": "#/definitions/space/definitions/created_at" }, "id": { "$ref": "#/definitions/space/definitions/id" @@ -10704,11 +11479,10 @@ "name": { "$ref": "#/definitions/organization/definitions/name" } }, "type": [ - "null", "object" ] }, "region": { "description": "identity of space region", @@ -10723,20 +11497,23 @@ "strictProperties": true, "type": [ "object" ] }, + "shield": { + "$ref": "#/definitions/space/definitions/shield" + }, "state": { "$ref": "#/definitions/space/definitions/state" }, "updated_at": { "$ref": "#/definitions/space/definitions/updated_at" } } }, "ssl-endpoint": { - "description": "[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` addon installed before it can provision an SSL Endpoint using these APIs.", + "description": "[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.", "$schema": "http://json-schema.org/draft-04/hyper-schema", "title": "Heroku Platform API - SSL Endpoint", "stability": "production", "strictProperties": true, "type": [ @@ -10927,10 +11704,25 @@ }, "title": "Update" } ], "properties": { + "app": { + "description": "application associated with this ssl-endpoint", + "type": [ + "object" + ], + "properties": { + "id": { + "$ref": "#/definitions/app/definitions/id" + }, + "name": { + "$ref": "#/definitions/app/definitions/name" + } + }, + "strictProperties": true + }, "certificate_chain": { "$ref": "#/definitions/ssl-endpoint/definitions/certificate_chain" }, "cname": { "$ref": "#/definitions/ssl-endpoint/definitions/cname" @@ -11269,11 +12061,11 @@ "dismissed-sms-banner": { "$ref": "#/definitions/user-preferences/definitions/dismissed-sms-banner" } } }, - "whitelisted-addon-service": { + "whitelisted-add-on-service": { "description": "Entities that have been whitelisted to be used by an Organization", "$schema": "http://json-schema.org/draft-04/hyper-schema", "stability": "prototype", "strictProperties": true, "title": "Heroku Platform API - Whitelisted Entity", @@ -11292,14 +12084,22 @@ }, "added_by": { "description": "the user which whitelisted the Add-on Service", "properties": { "email": { - "$ref": "#/definitions/account/definitions/email" + "$ref": "#/definitions/account/definitions/email", + "type": [ + "string", + "null" + ] }, "id": { - "$ref": "#/definitions/account/definitions/id" + "$ref": "#/definitions/account/definitions/id", + "type": [ + "string", + "null" + ] } }, "readOnly": true, "type": [ "object" @@ -11307,17 +12107,17 @@ }, "addon_service": { "description": "the Add-on Service whitelisted for use", "properties": { "id": { - "$ref": "#/definitions/addon-service/definitions/id" + "$ref": "#/definitions/add-on-service/definitions/id" }, "name": { - "$ref": "#/definitions/addon-service/definitions/name" + "$ref": "#/definitions/add-on-service/definitions/name" }, "human_name": { - "$ref": "#/definitions/addon-service/definitions/human_name" + "$ref": "#/definitions/add-on-service/definitions/human_name" } }, "readOnly": true, "type": [ "object" @@ -11333,14 +12133,14 @@ ] }, "identity": { "anyOf": [ { - "$ref": "#/definitions/whitelisted-addon-service/definitions/id" + "$ref": "#/definitions/whitelisted-add-on-service/definitions/id" }, { - "$ref": "#/definitions/addon-service/definitions/name" + "$ref": "#/definitions/add-on-service/definitions/name" } ] } }, "links": [ @@ -11349,11 +12149,11 @@ "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/whitelisted-addon-services", "method": "GET", "rel": "instances", "targetSchema": { "items": { - "$ref": "#/definitions/whitelisted-addon-service" + "$ref": "#/definitions/whitelisted-add-on-service" }, "type": [ "array" ] }, @@ -11375,41 +12175,41 @@ } } }, "targetSchema": { "items": { - "$ref": "#/definitions/whitelisted-addon-service" + "$ref": "#/definitions/whitelisted-add-on-service" }, "type": [ "array" ] }, "title": "Create" }, { "description": "Remove a whitelisted entity", - "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/whitelisted-addon-services/{(%23%2Fdefinitions%2Fwhitelisted-addon-service%2Fdefinitions%2Fidentity)}", + "href": "/organizations/{(%23%2Fdefinitions%2Forganization%2Fdefinitions%2Fidentity)}/whitelisted-addon-services/{(%23%2Fdefinitions%2Fwhitelisted-add-on-service%2Fdefinitions%2Fidentity)}", "method": "DELETE", "rel": "destroy", "targetSchema": { - "$ref": "#/definitions/whitelisted-addon-service" + "$ref": "#/definitions/whitelisted-add-on-service" }, "title": "Delete" } ], "properties": { "added_at": { - "$ref": "#/definitions/whitelisted-addon-service/definitions/added_at" + "$ref": "#/definitions/whitelisted-add-on-service/definitions/added_at" }, "added_by": { - "$ref": "#/definitions/whitelisted-addon-service/definitions/added_by" + "$ref": "#/definitions/whitelisted-add-on-service/definitions/added_by" }, "addon_service": { - "$ref": "#/definitions/whitelisted-addon-service/definitions/addon_service" + "$ref": "#/definitions/whitelisted-add-on-service/definitions/addon_service" }, "id": { - "$ref": "#/definitions/whitelisted-addon-service/definitions/id" + "$ref": "#/definitions/whitelisted-add-on-service/definitions/id" } } } }, "properties": { @@ -11417,31 +12217,37 @@ "$ref": "#/definitions/account-feature" }, "account": { "$ref": "#/definitions/account" }, - "addon-action": { - "$ref": "#/definitions/addon-action" + "add-on-action": { + "$ref": "#/definitions/add-on-action" }, - "addon-attachment": { - "$ref": "#/definitions/addon-attachment" + "add-on-attachment": { + "$ref": "#/definitions/add-on-attachment" }, - "addon-config": { - "$ref": "#/definitions/addon-config" + "add-on-config": { + "$ref": "#/definitions/add-on-config" }, - "addon-region-capability": { - "$ref": "#/definitions/addon-region-capability" + "add-on-plan-action": { + "$ref": "#/definitions/add-on-plan-action" }, - "addon-service": { - "$ref": "#/definitions/addon-service" + "add-on-region-capability": { + "$ref": "#/definitions/add-on-region-capability" }, - "addon": { - "$ref": "#/definitions/addon" + "add-on-service": { + "$ref": "#/definitions/add-on-service" }, + "add-on": { + "$ref": "#/definitions/add-on" + }, "app-feature": { "$ref": "#/definitions/app-feature" }, + "app-formation-set": { + "$ref": "#/definitions/app-formation-set" + }, "app-setup": { "$ref": "#/definitions/app-setup" }, "app-transfer": { "$ref": "#/definitions/app-transfer" @@ -11468,10 +12274,13 @@ "$ref": "#/definitions/credit" }, "domain": { "$ref": "#/definitions/domain" }, + "dyno-size": { + "$ref": "#/definitions/dyno-size" + }, "dyno": { "$ref": "#/definitions/dyno" }, "event": { "$ref": "#/definitions/event" @@ -11483,10 +12292,13 @@ "$ref": "#/definitions/filter-apps" }, "formation": { "$ref": "#/definitions/formation" }, + "identity-provider": { + "$ref": "#/definitions/identity-provider" + }, "inbound-ruleset": { "$ref": "#/definitions/inbound-ruleset" }, "invitation": { "$ref": "#/definitions/invitation" @@ -11516,49 +12328,46 @@ "$ref": "#/definitions/oauth-grant" }, "oauth-token": { "$ref": "#/definitions/oauth-token" }, - "organization-addon": { - "$ref": "#/definitions/organization-addon" + "organization-add-on": { + "$ref": "#/definitions/organization-add-on" }, "organization-app-collaborator": { "$ref": "#/definitions/organization-app-collaborator" }, "organization-app": { "$ref": "#/definitions/organization-app" }, + "organization-feature": { + "$ref": "#/definitions/organization-feature" + }, + "organization-invitation": { + "$ref": "#/definitions/organization-invitation" + }, "organization-invoice": { "$ref": "#/definitions/organization-invoice" }, "organization-member": { "$ref": "#/definitions/organization-member" }, - "organization-payment-method": { - "$ref": "#/definitions/organization-payment-method" - }, "organization-preferences": { "$ref": "#/definitions/organization-preferences" }, "organization": { "$ref": "#/definitions/organization" }, - "otp-secret": { - "$ref": "#/definitions/otp-secret" - }, "outbound-ruleset": { "$ref": "#/definitions/outbound-ruleset" }, "password-reset": { "$ref": "#/definitions/password-reset" }, - "payment-method": { - "$ref": "#/definitions/payment-method" + "organization-app-permission": { + "$ref": "#/definitions/organization-app-permission" }, - "payment": { - "$ref": "#/definitions/payment" - }, "pipeline-coupling": { "$ref": "#/definitions/pipeline-coupling" }, "pipeline-promotion-target": { "$ref": "#/definitions/pipeline-promotion-target" @@ -11573,13 +12382,10 @@ "$ref": "#/definitions/plan" }, "rate-limit": { "$ref": "#/definitions/rate-limit" }, - "recovery-code": { - "$ref": "#/definitions/recovery-code" - }, "region": { "$ref": "#/definitions/region" }, "release": { "$ref": "#/definitions/release" @@ -11588,10 +12394,13 @@ "$ref": "#/definitions/slug" }, "sms-number": { "$ref": "#/definitions/sms-number" }, + "sni-endpoint": { + "$ref": "#/definitions/sni-endpoint" + }, "source": { "$ref": "#/definitions/source" }, "space-app-access": { "$ref": "#/definitions/space-app-access" @@ -11609,11 +12418,11 @@ "$ref": "#/definitions/stack" }, "user-preferences": { "$ref": "#/definitions/user-preferences" }, - "whitelisted-addon-service": { - "$ref": "#/definitions/whitelisted-addon-service" + "whitelisted-add-on-service": { + "$ref": "#/definitions/whitelisted-add-on-service" } }, "description": "The platform API empowers developers to automate, extend and combine Heroku with other services.", "id": "http://api.heroku.com/schema#", "links": [