Root definitions

Add-On Descriptor

Permalink

The add-on descriptor is a JSON file (atlassian-connect.json) that describes the add-on to the Atlassian application. The descriptor includes general information for the add-on, as well as the modules that the add-on wants to use or extend.

If you're familiar with Java add-on development with previous versions of the Atlassian Plugin Framework, you may already be familiar with the `atlassian-plugin.xml` descriptors. The `atlassian-connect.json` serves the same function.

The descriptor serves as the glue between the remote add-on and the Atlassian application. When an administrator for a cloud instance installs an add-on, what they are really doing is installing this descriptor file, which contains pointers to your service. You can see an example below.

For details and application-specific reference information on the descriptor please refer to the "jira modules" and "confluence modules" sections of this documentation. But we'll call out a few highlights from the example here.

Since Atlassian Connect add-ons are remote and largely independent from the Atlassian application, they can be changed at any time, without having to create a new version or report the change to the Atlassian instance. The changes are reflected in the Atlassian instance immediately (or at least at page reload time).

However, some add-on changes require a change to the descriptor file itself. For example, an add-on could be modified to have a new page module. Since this requires a page module declaration in the descriptor, it means making an updated descriptor available. Until that updated descriptor is re-installed into the Atlassian Product that change in the descriptor file will not take effect. To propagate a change in the descriptor to the Atlassian products, you need to create a new version of the add-on in its Marketplace listing. The Marketplace will take care of the rest: informing administrators and automatically installing the available update. See [Upgrades](/platform/marketplace/upgrading-and-versioning-cloud-apps/) for more details.

Validating your descriptor

You can validate your descriptor using this handy tool.

Example

Copy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 { "modules": {}, "key": "my-addon-key", "dependencies": {}, "name": "My Connect Addon", "description": "A connect addon that does something", "vendor": { "name": "My Company", "url": "http://www.example.com" }, "links": { "self": "http://www.example.com/connect/jira" }, "lifecycle": { "installed": "/installed", "uninstalled": "/uninstalled" }, "baseUrl": "http://www.example.com/connect/jira", "authentication": { "type": "jwt" }, "enableLicensing": true, "editionsEnabled": false, "scopes": [ "read", "write" ], "translations": { "paths": { "en-US": "/i18n/1.0/en_US.json", "en-UK": "/i18n/1.0/en_UK.json", "zh-CN": "/i18n/1.0/zh_CN.json", "zh-TW": "/i18n/1.0/zh_TW.json", "tr-TR": "/i18n/1.0/tr_TR.json", "cs-CZ": "/i18n/1.0/cs_CZ.json", "da-DK": "/i18n/1.0/da_DK.json", "nl-NL": "/i18n/1.0/nl_NL.json", "et-EE": "/i18n/1.0/et_EE.json", "fi-FI": "/i18n/1.0/fi_FI.json", "fr-FR": "/i18n/1.0/fr_FR.json", "de-DE": "/i18n/1.0/de_DE.json", "hu-HU": "/i18n/1.0/hu_HU.json", "is-IS": "/i18n/1.0/is_IS.json", "it-IT": "/i18n/1.0/it_IT.json", "ja-JP": "/i18n/1.0/ja_JP.json", "ko-KR": "/i18n/1.0/ko_KR.json", "no-NO": "/i18n/1.0/no_NO.json", "pl-PL": "/i18n/1.0/pl_PL.json", "pt-PT": "/i18n/1.0/pt_PT.json", "pt-BR": "/i18n/1.0/pt_BR.json", "ro-RO": "/i18n/1.0/ro_RO.json", "ru-RU": "/i18n/1.0/ru_RU.json", "sk-SK": "/i18n/1.0/sk_SK.json", "es-ES": "/i18n/1.0/es_ES.json", "sv-SE": "/i18n/1.0/sv_SE.json" } }, "apiMigrations": {}, "regionBaseUrls": { "EU": "https://eu.test.atlassian.com", "US": "https://us.test.atlassian.com" }, "dataResidency": { "realmPersistenceDays": 5, "maxMigrationDurationHours": 2.0 }, "cloudAppMigration": {} }

Properties

editionsEnabled

boolean

A boolean value indicating if the add-on is enabled for editions.

aliasKey

string

An alias for the app key, which is used for those operations which impose a limit on the length of app keys. For other operations, the longer key value will be used.

The alias key must be <= 32 characters in length.

Max length: 32, Pattern: ^[a-zA-Z0-9-._]+$
description

string

A human readable description of what the add-on does. The description will be visible in the Manage Add-ons section of the administration console. Provide meaningful and identifying information for the instance administrator.

Max length: 1400
version

string

NOTE This field is reserved for Atlassian Marketplace. Any value provided will be ignored.

The version of the add-on. Upon registration of a new add-on version in Atlassian Marketplace, a value for this field is generated and subsequently provided to the Universal Plugin Manager.

modules

modules

dataResidency

App Data Residency

Gives apps data residency information on realm persistence.

Example

Copy
1 2 3 4 5 6 { "dataResidency": { "realmPersistenceDays": 9, "maxMigrationDurationHours": 2.0 } }
lifecycle

Lifecycle

Allows an add-on to register callbacks for events that occur in the lifecycle of an installation. When a lifecycle event is fired, a POST request will be made to the appropriate URL registered for the event.

The installed lifecycle callback is an integral part of the installation process of an add-on, whereas the remaining lifecycle events are essentially webhooks.

Each property in this object is a URL relative to the add-on's base URL.

Lifecycle attribute example

Copy
1 2 3 4 5 6 { "installed": "/installed", "uninstalled": "/uninstalled", "enabled": "/enabled", "disabled": "/disabled" }

Lifecycle HTTP request payload

Lifecycle callbacks contain a JSON data payload with important tenant information that you will need to store in your add-on in order to sign and verify future requests. The payload contains the following attributes:
Copy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 { "key": "installed-addon-key", "clientKey": "unique-client-identifier", "sharedSecret": "a-secret-key-not-to-be-lost", "serverVersion": "server-version", "pluginsVersion": "version-of-connect", "baseUrl": "https://example.atlassian.net", "displayUrl": "https://jira.example.net", "productType": "jira", "description": "Atlassian Jira at https://example.atlassian.net", "serviceEntitlementNumber": "SEN-number", "eventType": "installed", "displayUrlServicedeskHelpCenter": "https://servicedesk.jira.example.net" }
"Lifecycle payload attributes"
AttributeDescription
keyAdd-on key that was installed into the Atlassian Product, as it appears in your add-on's descriptor.
clientKeyIdentifying key for the Atlassian product instance that the add-on was installed into. This will never change for a given instance, and is unique across all Atlassian product tenants. This value should be used to key tenant details in your add-on. The one time the clientKey can change is when a backup taken from a different instance is restored onto the instance. Determining the contract between the instance and add-on in this situation is tracked by AC-1528 in the Connect backlog.
sharedSecretUse this string to sign outgoing JWT tokens and validate incoming JWT tokens. Optional: and may not be present on non-JWT add-on installations, and is only sent on the installed event.
serverVersionThis is a string representation of the host product's version. Generally you should not need it.
pluginsVersionThis is a semver compliant version of Atlassian Connect which is running on the host server, for example: 1.1.15.
baseUrlURL prefix for this Atlassian product instance. All of its REST endpoints begin with this `baseUrl`.
productTypeIdentifies the category of Atlassian product, e.g. jira or confluence.
descriptionThe host product description - this is customisable by an instance administrator.
serviceEntitlementNumber (optional)Also known as the SEN, the service entitlement number is the add-on license id. This attribute will only be included during installation of a paid add-on.
oauthClientIdThe OAuth 2.0 client ID for your add-on. For more information, see OAuth 2.0 - JWT Bearer token authorization grant type

Request query parameters

When this payload information is POSTed to your Atlassian Connect service you may receive the user\_key and user\_id query parameters; these query parameters are both deprecated. Deprecated If you wish to find out which user enabled your add-on then you should extract the context.user.userKey or context.user.userName data from the JWT token on the enabled lifecycle event.

baseUrl Required

string

The base url of the remote add-on, which is used for all communications back to the add-on instance. Once the add-on is installed in a product, the add-on's baseUrl cannot be changed without first uninstalling the add-on or upgrading to a new version. This is important; choose your baseUrl wisely before making your add-on public.

The baseUrl must start with https:// to ensure that all data is sent securely between our cloud instances and your add-on.

Note: each add-on must have a unique baseUrl. If you would like to serve multiple add-ons from the same host, consider adding a path prefix into the baseUrl.

Max length: 200, Pattern: ^((https|http):\/\/.+|)$, Format: uri
apiMigrations

Api Migrations

Allows an add-on to opt-into an active api migration.

Goal of this feature is to support API changes that could not be made backward compatible. Such changes will break existing apps that do not yet support new API version. The opt-in mechanism allows app vendors to communicate to host product what API changes they support.

See active migrations page for the list of currently active API migrations.

Copy
1 {"apiMigrations":{"gdpr":true}}

For more info about this feature see API migration Opt-in documentation.

apiVersion

integer

The API version is an OPTIONAL integer. If omitted we will infer an API version of 1.

The intention behind the API version is to allow vendors the ability to beta test a major revision to their Connect add-on as a private version, and have a seamless transition for those beta customers (and existing customers) once the major revision is launched.

Vendors can accomplish this by listing a new private version of their add-on, with a new descriptor hosted at a new URL.

They use the Atlassian Marketplace's access token facilities to share this version with customers (or for internal use). When this version is ready to be taken live, it can be transitioned from private to public, and all customers will be seamlessly updated.

It's important to note that this approach allows vendors to create new versions manually, despite the fact that in the common case, the versions are automatically created. This has a few benefits-- for example, it gives vendors the ability to change their descriptor URL if they need to (the descriptor URL will be immutable for existing versions)

regionBaseUrls

regionBaseUrls

The regions and respective url this app is hosted on.

Copy
1 2 3 4 5 6 { "regionBaseUrls": { "EU": "https://eu.test.atlassian.com", "US": "https://us.test.atlassian.com" } }
vendor

Plugin Vendor

Gives basic information about the plugin vendor.

Example

Copy
1 2 3 4 5 6 { "vendor": { "name": "Atlassian", "url": "http://www.atlassian.com" } }
translations

Translations

Defines the locations of any translation files for your add-on. A translation file maps the localization keys for UI modules in your add-on descriptor to translated strings. You will need one translation file per language. To learn more, read Internationalization.

Example

Copy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "paths": { "en-US": "/i18n/1.0/en_US.json", "en-UK": "/i18n/1.0/en_UK.json", "zh-CN": "/i18n/1.0/zh_CN.json", "zh-TW": "/i18n/1.0/zh_TW.json", "tr-TR": "/i18n/1.0/tr_TR.json", "cs-CZ": "/i18n/1.0/cs_CZ.json", "da-DK": "/i18n/1.0/da_DK.json", "nl-NL": "/i18n/1.0/nl_NL.json", "et-EE": "/i18n/1.0/et_EE.json", "fi-FI": "/i18n/1.0/fi_FI.json", "fr-FR": "/i18n/1.0/fr_FR.json", "de-DE": "/i18n/1.0/de_DE.json", "hu-HU": "/i18n/1.0/hu_HU.json", "is-IS": "/i18n/1.0/is_IS.json", "it-IT": "/i18n/1.0/it_IT.json", "ja-JP": "/i18n/1.0/ja_JP.json", "ko-KR": "/i18n/1.0/ko_KR.json", "no-NO": "/i18n/1.0/no_NO.json", "pl-PL": "/i18n/1.0/pl_PL.json", "pt-PT": "/i18n/1.0/pt_PT.json", "pt-BR": "/i18n/1.0/pt_BR.json", "ro-RO": "/i18n/1.0/ro_RO.json", "ru-RU": "/i18n/1.0/ru_RU.json", "sk-SK": "/i18n/1.0/sk_SK.json", "es-ES": "/i18n/1.0/es_ES.json", "sv-SE": "/i18n/1.0/sv_SE.json" } }
enableLicensing

boolean

Whether or not to enable licensing options in the UPM/Marketplace for this add on

name

string

The human-readable name of the add-on

Max length: 80
links

links

A set of links that the add-on wishes to publish

Copy
1 2 3 4 5 6 { "links": { "self": "https://addon.domain.com/atlassian-connect.json", "documentation": "https://addon.domain.com/docs" } }
scopes

Array<string>

Set of scopes requested by this add on

Copy
1 2 3 4 5 6 { "scopes": [ "read", "write" ] }

Valid values: none, NONE, read, READ, write, WRITE, delete, DELETE, project_admin, PROJECT_ADMIN ...(Show more)

key Required

string

A unique key to identify the add-on. This key must only contain alphanumeric characters, dashes, underscores, and dots. A key without an alias key value must be <= 64 characters in length. Where an alias key is provided, the length limit is increased to 90 characters

Max length: 90, Pattern: ^[a-zA-Z0-9-._]+$
cloudAppMigration

cloudAppMigration

Settings used for server to cloud app migrations

authentication Required

Authentication

Defines the authentication type to use when signing requests from the host application to the Connect add-on.

Example

Copy
1 2 3 4 5 { "authentication": { "type": "jwt" } }
Loading...

Editor and Validator