Table of Contents
Version 0.1.0-alpha – a preview, not released yet: endpoints and contracts may still change without notice.
The Matrix42 Extensions Public API lets pipelines, scripts and other automation work with Extensions without the Matrix42 DevOps Portal: find the release to install or update a package to on an environment, get its installation plan and download, and, as vendor, upload and publish releases and edit their release notes.
Basics
Base URL
https://extensions.matrix42.com/api/v1All paths in this article are relative to it.
Authentication
Every request needs an access token of your Matrix42 account in the Authorization header. For pipelines and scripts, create a personal access token (PAT) at the bottom of your account page on accounts.matrix42.com.
Authorization: Bearer <token>Vendor endpoints (uploading, publishing, release note drafts) need the "Contributor" permission on the Extension.
Conventions
- Packages are identified by their package id, the
Idin package.json. Releases are identified by thereleaseIdthe API returns; a version alone is not unique, as releases of the same version can differ in their product version requirement. - Requests and responses are JSON (
application/json); release logs are text, errorsapplication/problem+json. - Values of fixed sets, e.g. a status, are lowercase strings such as
available-with-issues. - Times are UTC in ISO 8601.
- List endpoints return one page:
itemsandcount(all items), paged withskip(default 0) andtake(1 to 100, default 20).
Typical workflows
Installing or updating a package on an environment
-
POST /packages/{packageId}/latestwith the environment, its product version and its installed packages: returns the release to install, whether an update is available, and its installation plan. -
POST /packages/{packageId}/published/{releaseId}/provisioningfor each package of the plan'sinstallationOrder: returns the download. - After installing,
POST /environments/{installationEnvironment}/installed-packagesreports the new state of the environment; a failed installation is reported withPOST /packages/{packageId}/published/{releaseId}/failures.
Publishing a release as vendor
-
POST /packages/{packageId}/releasesuploads the signed package; the first upload of a package needscreateExtension=true. -
GET /packages/{packageId}/releases/{releaseId}?waitSeconds=45until the release is validated (available,available-with-issuesorfailed);GET …/logsshows the validation log. -
POST /packages/{packageId}/releases/{releaseId}/publishpublishes it. -
PUT /packages/{packageId}/releases/{releaseId}/release-notewrites its release note.
Errors
Every error is an ErrorResponse (RFC 9457 problem details, application/problem+json) with a stable code, also given as URI in type; each endpoint below lists its status codes and error codes. Check code (or type), not title or detail: the texts may change.
{
"type": "https://extensions.matrix42.com/problems/release-already-uploaded",
"status": 409,
"code": "release-already-uploaded",
"title": "Conflict",
"detail": "A release with version 1.2.0 and the same product version requirement exists already.",
"instance": "/api/v1/packages/9720d1e9-65f1-4897-b850-2a5bdb72cfcc/releases",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00",
"data": {
"packageId": "9720d1e9-65f1-4897-b850-2a5bdb72cfcc",
"version": "1.2.0"
}
}Every endpoint can also answer with:
| Status | Description | ||
|---|---|---|---|
| 401 |
unauthorized: no or an invalid access token. |
||
| 500 |
internal-error: unexpected server error, without details; traceId identifies the request, please include it when contacting support. |
||
Installing and Updating Packages
Automated installation and update of packages: the release to install, the published releases, the installation plan, the download, and reports of failed installations.
POST /packages/{packageId}/latest
The release to install or update a package to on an environment.
Given installed packages are stored for the environment first (updated, or replaced with replace, like POST environments/{installationEnvironment}/installed-packages); without them the stored ones are used.
The answer is the newest release that supports the product version, is newer than the installed version (see allowDowngrade), has resolvable dependencies and doesn't break another installed package: no installed package loses a version it requires. Installed dependencies that suffice are kept. Obsolete releases are left out; among releases sharing a version the one with the stricter product version requirement wins. Newer releases that can't be installed are listed in skippedReleases with the reasons.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
Request body
application/json: The environment to find the release to install or update to for.
| Field | Type | Required | Description |
|---|---|---|---|
installationEnvironment |
string | yes | Host (or URL) of the environment; the installed packages are stored for it. |
productVersion |
string | yes | Product (ESM) version of the environment, e.g. 12.1.0.1234. |
installedPackages |
array of ReportedPackage (9.3) | no | Packages installed in the environment, incl. the requested one when it is installed. When given, they are stored for the environment first (see replace); when left out, the stored ones are used. |
replace |
boolean | no | The installed packages replace all stored ones, so uninstalled packages drop out. By default only the given packages are added or set to their version and all others are kept. |
allowPreviewReleases |
boolean | no | Considers preview releases too; they are left out by default. |
allowDowngrade |
boolean | no | Offers the newest release supporting the product version even when the installed version is newer (e.g. after a product downgrade). Dependencies are never downgraded. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | LatestReleaseResponse (7.4) | The release and the update status; isUpdateAvailable tells whether to install release, then following installationPlan. |
|
| 400 | ErrorResponse (10.1) |
installation-environment-required, product-version-required, invalid-product-version, invalid-installed-package (an installed package lacks its GUID id or a valid version, is given twice, or its releaseId is no release of the package in that version; errors names the field, nothing is stored), invalid-request. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package; no-compatible-release: no release supports the product version (data.releases). |
|
| 409 | ErrorResponse (10.1) |
no-installable-release: the package is not installed and no release supporting the product version can be installed next to the installed packages (data.skippedReleases, data.unknownInstalledPackageIds). |
|
GET /packages/{packageId}/published
The published releases of a package the caller may see, highest version first.
With a product version only the releases supporting it are listed (see includeIncompatible); without one all, with isCompatible null. A version can exist in several releases, differing in their product version requirement: filter by version to find the release id of a version. Among releases of the same version the stricter requirement comes first, then the newer one, as latest picks them.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
version query
|
string | no | Only releases of this version, e.g. 1.2.0; 1.2 equals 1.2.0. |
productVersion query
|
string | no | Product (ESM) version to check the releases against; takes precedence over installationEnvironment. |
installationEnvironment query
|
string | no | Host whose known product version is used when productVersion is not given. |
includeIncompatible query
|
boolean | no | Lists releases not supporting the product version too, with isCompatible false. |
includeObsolete query
|
boolean | no | Lists obsolete releases too; they are left out by default. |
includePreview query
|
boolean | no | Lists preview releases too; they are left out by default. |
skip query
|
integer | no | Number of items to skip; default 0. |
take query
|
integer | no | Number of items to return, 1 to 100; default 20. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | list page (7.5) of PublishedReleaseResponse (7.8) | A page of the releases; an empty list when no release matches. | |
| 400 | ErrorResponse (10.1) |
invalid-product-version, invalid-request (invalid version or paging). |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package. |
|
| 502 | ErrorResponse (10.1) |
installation-environment-unreachable: the product version of the environment could not be queried; pass productVersion instead. |
|
GET /packages/{packageId}/published/{releaseId}
A published release of a package.
Information only: obsolete, preview and incompatible releases are returned too, see isObsolete, isPreview and isCompatible. Installation plan and provisioning refuse them unless allowed.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
productVersion query
|
string | no | Product (ESM) version to check the release against; takes precedence over installationEnvironment. |
installationEnvironment query
|
string | no | Host whose known product version is used when productVersion is not given. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | PublishedReleaseDetailResponse (7.7) | The release, checked against the product version when one is known. | |
| 400 | ErrorResponse (10.1) |
invalid-product-version. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release. |
|
| 502 | ErrorResponse (10.1) |
installation-environment-unreachable: the product version of the environment could not be queried; pass productVersion instead. |
|
GET /packages/{packageId}/published/{releaseId}/installation
The installation plan of a published release: what to install in which order.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
installationEnvironment query
|
string | no | Host (or URL) of the environment; its installed packages are taken into account, and its known product version is used when productVersion is not given. |
productVersion query
|
string | no | Product (ESM) version to install on; takes precedence over installationEnvironment. |
allowPreviewReleases query
|
boolean | no | Allows preview releases for the dependencies. |
allowIncompatible query
|
boolean | no | Plans the release although it doesn't support the product version (409 without it). |
allowObsolete query
|
boolean | no | Plans an obsolete release too (409 without it); its dependencies are still never resolved to obsolete releases. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | InstallationPlanResponse (7.2) | The plan: install installationOrder in this order; uninstallablePrerequisites must be provided by the environment. |
|
| 400 | ErrorResponse (10.1) |
invalid-product-version. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown or revoked package or release. |
|
| 409 | ErrorResponse (10.1) |
release-obsolete: the release is obsolete and allowObsolete is not set; incompatible-release: the release does not support the product version and allowIncompatible is not set. |
|
| 502 | ErrorResponse (10.1) |
installation-environment-unreachable: the product version of the environment could not be queried; pass productVersion instead. |
|
POST /packages/{packageId}/published/{releaseId}/provisioning
The download of a published release to install it on an environment, incl. the license check.
Revoked releases (invalid content signature) are never handed out. Without productVersion the known product version of the environment is checked.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Request body
application/json: Asks for the download of a release to install it on an environment.
| Field | Type | Required | Description |
|---|---|---|---|
installationEnvironment |
string | yes | Host (or URL) of the environment the release is installed on. |
productVersion |
string | no | Product (ESM) version of the environment, which the release must support; without it the known product version of the environment is used. |
allowObsolete |
boolean | no | Hands out an obsolete release too; without it an obsolete release is answered with 409. |
allowIncompatible |
boolean | no | Hands out the release although it doesn't support the product version; without it such a release is answered with 409. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | ProvisioningResponse (7.6) | The time-limited downloadUrl of the package (ZIP) incl. its license; download it right away. |
|
| 400 | ErrorResponse (10.1) |
installation-environment-required, invalid-product-version, invalid-request (e.g. no body). |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown, revoked or not licensed release. |
|
| 409 | ErrorResponse (10.1) |
release-obsolete: the release is obsolete and allowObsolete is not set; incompatible-release: the release does not support the product version and allowIncompatible is not set. |
|
| 502 | ErrorResponse (10.1) |
installation-environment-unreachable: the product version of the environment could not be queried; pass productVersion instead. |
|
POST /packages/{packageId}/published/{releaseId}/failures
Reports a failed installation of a published release.
The error message and the log are stored for the vendor, who sees them in the installation analytics of the package. Only releases the caller may install can be reported. Successful installations are not reported.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Request body
application/json: A failed installation of a release on an environment.
| Field | Type | Required | Description |
|---|---|---|---|
installationEnvironment |
string | yes | Host (or URL) of the environment the installation failed on. |
errorMessage |
string | yes | The error message (e.g. the exception) the installation failed with. |
logs |
array of InstallationLogEntry (9.1) | no | The log of the installation; stored for the vendor next to the error message. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | FailedInstallationResponse (7.1) | The stored failure. | |
| 400 | ErrorResponse (10.1) |
installation-environment-required, invalid-request (e.g. no errorMessage). |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown or inaccessible release. |
|
Uploading and Publishing Releases
The uploaded releases of a package, as its vendor sees them: upload, status, validation log, publishing.
GET /packages/{packageId}/releases
All uploaded releases of a package, published or not, newest upload first.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
version query
|
string | no | Only releases of this version, e.g. 1.2.0; 1.2 equals 1.2.0. |
skip query
|
integer | no | Number of items to skip; default 0. |
take query
|
integer | no | Number of items to return, 1 to 100; default 20. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | list page (7.5) of UploadedReleaseResponse (7.10) | A page of the releases. | |
| 400 | ErrorResponse (10.1) |
invalid-request: invalid version or paging. |
|
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the contributor permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package, or the caller is no contributor of it. |
|
POST /packages/{packageId}/releases
Uploads a new release of a package.
The package id in the route must be the one in the package's package.json. The first upload of a package needs createExtension=true, which creates its extension; without it an unknown package is rejected and nothing is created, so a wrong package id never creates an extension by accident.
The release is validated asynchronously: wait for its final status with GET releases/{releaseId}.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
Request body
multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
package |
file | yes | The signed package (ZIP) incl. its package.json. |
createExtension |
boolean | no | Creates the extension (the entry the package is managed under in the Extensions portal) when none exists for the package yet. Without it, an upload for an unknown package is rejected, so a wrong package id never creates an extension by accident. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 201 | UploadedReleaseResponse (7.10) | The release is done already, e.g. it failed right away; see its status. |
|
| 202 | UploadedReleaseResponse (7.10) | The release is being validated; Location points to it, Retry-After says when to ask again. | |
| 400 | ErrorResponse (10.1) |
invalid-package: no ZIP, no package.json at its root, or no valid JSON in it; package-id-mismatch: the package id in the route differs from package.json; invalid-version: the package version is invalid; invalid-request (e.g. no Package). |
|
| 403 | ErrorResponse (10.1) |
no-package-access: the caller is no contributor of the package. |
|
| 404 | ErrorResponse (10.1) |
package-not-found: no extension exists for the package and createExtension is not set; nothing is created (data.packageId). |
|
| 409 | ErrorResponse (10.1) |
package-name-exists: with createExtension, the caller already has an extension with the package's name; detail says what to do (data.packageName, data.existingPackageId, data.uploadedPackageId). release-already-uploaded: a release with the same version and product version requirement exists (data.packageId, data.releaseId, data.version). package-already-uploaded: the package id is used by another vendor or contributor. package-deleted: the package is deleted and must be restored first. |
|
GET /packages/{packageId}/releases/{releaseId}
An uploaded release incl. its status, e.g. to wait for the validation after an upload. While the release is in progress (pending, validating, publishing, ...) the response carries a Retry-After header.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
waitSeconds query
|
integer | no | Waits up to this long (at most 45) for the release to leave its in-progress status and answers as soon as it does; without it the current status is returned at once. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | UploadedReleaseResponse (7.10) | The release; carries Retry-After while it is in progress. | |
| 400 | ErrorResponse (10.1) |
invalid-request: waitSeconds out of range. |
|
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the contributor permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release, or the caller is no contributor of the package. |
|
GET /packages/{packageId}/releases/{releaseId}/logs
The validation log of an uploaded release (text/plain).
Read it when the release status is failed, to learn why.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | text (text/plain) |
The log as a text file. | |
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the contributor permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release, the caller is no contributor of the package, or the release has no log (yet). |
|
POST /packages/{packageId}/releases/{releaseId}/publish
Publishes an uploaded release.
The release must be available or available-with-issues. Publishing runs on: the release is publishing first and published when done (wait with GET releases/{releaseId}).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Request body
application/json: Publishes an available release.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | The name the package is published under. 1 to 50 characters. |
description |
string | yes | The description the package is published with. 1 to 700 characters. |
visibility |
string | yes | public, vendor or contributors. |
versionTag |
string | no | none (default), release-candidate, technical-preview or unstable. |
publishToCommunity |
boolean | no | Publishes to the community; only Matrix42 and partners may choose, everybody else always does. |
termsAndConditionsAccepted |
boolean | no | Required for every vendor but Matrix42. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | UploadedReleaseResponse (7.10) | The release with its status after the request; carries Retry-After while publishing. | |
| 400 | ErrorResponse (10.1) |
terms-and-conditions-not-accepted, invalid-request (e.g. no body, or an invalid visibility). |
|
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the publisher permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release, or the caller is no contributor of the package. |
|
| 409 | ErrorResponse (10.1) |
invalid-dependency-tree: the dependencies of the release can't be published (data.conflicts). |
|
PUT /packages/{packageId}/releases/{releaseId}/publish
Changes the visibility, version tag or obsolete flag of a published release.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Request body
application/json: Changes how a published release is offered.
| Field | Type | Required | Description |
|---|---|---|---|
visibility |
string | yes | public, vendor or contributors. |
versionTag |
string | no | none (default), release-candidate, technical-preview or unstable. |
isObsolete |
boolean | no | Obsolete releases are no longer offered for automated installation. |
upgradeFromCommunity |
boolean | no | Moves a community package to the vendor's own category; only Matrix42 and partners. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | UploadedReleaseResponse (7.10) | The release. | |
| 400 | ErrorResponse (10.1) |
invalid-request (e.g. no body, or an invalid visibility). |
|
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the publisher permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release, the release is not published, or the caller is no contributor of the package. |
|
Environments
The environments packages are installed on, as the server knows them: their installed packages and last reported product version. POST latest plans against the installed packages, and endpoints given only the environment use its product version.
GET /environments/{installationEnvironment}/installed-packages
The installed packages stored for an environment and its last reported product version.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
installationEnvironment path
|
string | yes | Host of the environment, e.g. customer.m42cloud.com. |
skip query
|
integer | no | Number of items to skip; default 0. |
take query
|
integer | no | Number of items to return, 1 to 100; default 20. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | InstalledPackagesResponse (7.3) | A page of the packages; an empty list when none are known for the environment. | |
| 400 | ErrorResponse (10.1) |
invalid-request: no valid host, or invalid paging. |
|
POST /environments/{installationEnvironment}/installed-packages
Reports the installed packages of an environment.
By default the given packages are added or set to their version and all others are kept; with replace they replace all stored ones, so uninstalled packages drop out.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
installationEnvironment path
|
string | yes | Host of the environment, e.g. customer.m42cloud.com. |
Request body
application/json: The installed packages an environment reports.
| Field | Type | Required | Description |
|---|---|---|---|
productVersion |
string | no | Product (ESM) version of the environment, e.g. 12.1.0.1234; when given, it is stored as the known one of the environment (used by endpoints given only the environment). When left out, the stored one is kept. |
installedPackages |
array of ReportedPackage (9.3) | yes | The installed packages, each at most once; with replace all of them, so an empty list means nothing is installed. |
replace |
boolean | no | The packages replace all stored ones, so uninstalled packages drop out. By default only the given packages are added or set to their version and all others are kept. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | InstalledPackagesResponse (7.3) | All installed packages stored for the environment afterwards. | |
| 400 | ErrorResponse (10.1) |
invalid-product-version, invalid-installed-package (an installed package lacks its GUID id or a valid version, is given twice, or its releaseId is no release of the package in that version; errors names the field, nothing is stored), invalid-request (e.g. no valid host, no body). |
|
Release Notes
Release notes: the published ones of a package, and the draft of each release for its vendor.
GET /packages/{packageId}/release-notes
The published release notes of a package, newest first.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
version query
|
string | no | Only the notes of this version, e.g. the installed one; 2.0 equals 2.0.0. A version can exist in several releases (differing in their product version requirement), so this can still be several notes. |
skip query
|
integer | no | Number of items to skip; default 0. |
take query
|
integer | no | Number of items to return, 1 to 100; default 20. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | list page (7.5) of ReleaseNoteResponse (7.9) | A page of the notes; an empty list when the package has none. | |
| 400 | ErrorResponse (10.1) |
invalid-request: invalid version or paging. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package. |
|
GET /packages/{packageId}/published/{releaseId}/release-note
The release note of a published release.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | ReleaseNoteResponse (7.9) | The published note. | |
| 404 | ErrorResponse (10.1) |
not-found: unknown release, or it has no published note. |
|
GET /packages/{packageId}/releases/{releaseId}/release-note
The release note of an uploaded release incl. an unpublished draft.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | ReleaseNoteResponse (7.9) | The note, published or not. | |
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the contributor permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release, the release has no note, or the caller is no contributor of the package. |
|
PUT /packages/{packageId}/releases/{releaseId}/release-note
Creates (201) or replaces (200) the release note of an uploaded release.
Write the note as a draft any time; publish it (isPublished) once the release is published.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
packageId path
|
string | yes | The package id, as in package.json. |
releaseId path
|
string | yes | The id of the release. |
Request body
application/json: Creates or updates the release note of a release.
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | yes | The title, e.g. the version; must not be empty. |
content |
string | no | The text of the note, in the format of contentType. |
contentType |
string | no | plaintext, markdown or html. |
links |
array of ReleaseNoteLinkInput (9.2) | no | The links of the note, each name at most once. |
isPublished |
boolean | no | Publishes the note; only possible for a published release. |
Responses
| Status | Body | Description | |
|---|---|---|---|
| 200 | ReleaseNoteResponse (7.9) | The note was replaced. | |
| 201 | ReleaseNoteResponse (7.9) | The note was created. | |
| 400 | ErrorResponse (10.1) |
release-note-title-required, invalid-request (e.g. no body, a link without name or URL, or a link name given twice). |
|
| 403 | ErrorResponse (10.1) |
forbidden: the caller lacks the contributor permission on the package. |
|
| 404 | ErrorResponse (10.1) |
not-found: unknown package or release, or the caller is no contributor of the package. |
|
| 409 | ErrorResponse (10.1) |
release-not-published: isPublished for a release that is not published (yet); release-package-not-found: no published package exists for the release. |
|
Responses
What the endpoints answer with (or a page of it, see ListResponse).
FailedInstallationResponse
A stored failed installation; the vendor sees it in the installation analytics of the package.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
installationEnvironment |
string | The environment, as host. | |
failedAt |
string (date-time, UTC) | When the failure was stored (UTC). | |
logEntryCount |
integer | Number of stored log entries. | |
InstallationPlanResponse
How to install a release: what to install in which order and what the environment must provide.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
requiresMaintenanceMode |
boolean | Whether the environment must be in maintenance mode for the installation. | |
installationOrder |
array of Prerequisite (8.2) | The packages to install, in this order; the release itself is the last one. | |
dependencies |
array of Prerequisite (8.2) | All package dependencies of the release, installed already or not. | |
uninstallablePrerequisites |
array of Prerequisite (8.2) | What the environment must provide and the API can't install: the product version and software. | |
InstalledPackagesResponse
The installed packages stored for an environment, with its last reported product version.
| Field | Type | Description | |
|---|---|---|---|
items |
array of InstalledPackage (8.1) | The items of the page. | |
count |
integer | The number of all items matching the request, not only of this page. | |
skip |
integer | The number of skipped items, as requested. | |
take |
integer | The page size, as requested. | |
installationEnvironment |
string | The environment, as host. | |
productVersion |
string | The product (ESM) version last reported for the environment; null when none is known. | |
LatestReleaseResponse
The release to install or update a package to on an environment.
| Field | Type | Description | |
|---|---|---|---|
release |
PublishedReleaseDetailResponse (7.7) | The release to install; with up-to-date, installed-version-newer and update-blocked the newest compatible release, which is not to be installed. | |
installedVersion |
string | The installed version of the package; null when it is not installed. | |
installedReleaseId |
string | The installed release; null when it is not installed or was reported without its release id. | |
updateStatus |
string | not-installed, update-available, downgrade, up-to-date, installed-version-newer or update-blocked. | |
isUpdateAvailable |
boolean | True when release is to be installed (not-installed, update-available, downgrade). |
|
installationPlan |
InstallationPlanResponse (7.2) | The plan to install release; only set when isUpdateAvailable. |
|
skippedReleases |
array of SkippedRelease (8.5) | Newer compatible releases that can't be installed, newest first, with the reasons. | |
unknownInstalledPackageIds |
array of string | Installed packages unknown to the server; their requirements could not be checked. | |
ListResponse
The response of every v1 list endpoint: one page of the items.
| Field | Type | Description | |
|---|---|---|---|
items |
array of object | The items of the page. | |
count |
integer | The number of all items matching the request, not only of this page. | |
skip |
integer | The number of skipped items, as requested. | |
take |
integer | The page size, as requested. | |
ProvisioningResponse
Where to download a release for installation.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
name |
string | The name of the package. | |
vendorName |
string | The name of the vendor. | |
downloadUrl |
string | Pre-authorized, time-limited URL of the package (ZIP) incl. its license. | |
requiresMaintenanceMode |
boolean | Whether the environment must be in maintenance mode to install the release. | |
PublishedReleaseDetailResponse
A published release of a package with all details, as offered for installation.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
name |
string | The name the release is published under; it can change from release to release. | |
productVersionRequirement |
string | Product (ESM) version requirement of the release: a minimum (e.g. ">=12.1"), a maximum ("<=13.0") or a range ("12.1-13.0"); null when it has none. | |
publishedAt |
string (date-time, UTC) | When the release was published (UTC). | |
isObsolete |
boolean | Whether the vendor marked the release obsolete; obsolete releases are not offered for automated installation and listed only with includeObsolete. | |
isPreview |
boolean | Whether the release is a preview (unstable, technical preview or release candidate); listed only with includePreview. | |
isCritical |
boolean | Whether the vendor marked the release as critical update. | |
isCompatible |
boolean | Whether the release supports the product version; null when none is known. Listed as false only with includeIncompatible. | |
description |
string | The description the package is published with. | |
vendorName |
string | The name of the vendor. | |
vendorId |
string | The id of the vendor. | |
productVersion |
string | The product version the release was checked against; null when none is known. | |
isLicensed |
boolean | Whether the caller is licensed to install the release. | |
isContentSigned |
boolean | Whether the content of the package is signed. | |
isUninstallSupported |
boolean | Whether the package can be uninstalled. | |
isSandboxed |
boolean | Whether package.json marks the package as sandboxed. | |
requiresMaintenanceMode |
boolean | Whether the environment must be in maintenance mode to install the release. | |
visibility |
string | Who may see the release: public, vendor or contributors. | |
categories |
array of string | The categories of the package. | |
logoUrl |
string | URL of the package logo. | |
launchUrl |
string | Where the installed package opens in the environment (launch URL of package.json), usually relative to the environment's host. | |
PublishedReleaseResponse
A published release of a package, as listed by GET published.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
name |
string | The name the release is published under; it can change from release to release. | |
productVersionRequirement |
string | Product (ESM) version requirement of the release: a minimum (e.g. ">=12.1"), a maximum ("<=13.0") or a range ("12.1-13.0"); null when it has none. | |
publishedAt |
string (date-time, UTC) | When the release was published (UTC). | |
isObsolete |
boolean | Whether the vendor marked the release obsolete; obsolete releases are not offered for automated installation and listed only with includeObsolete. | |
isPreview |
boolean | Whether the release is a preview (unstable, technical preview or release candidate); listed only with includePreview. | |
isCritical |
boolean | Whether the vendor marked the release as critical update. | |
isCompatible |
boolean | Whether the release supports the product version; null when none is known. Listed as false only with includeIncompatible. | |
ReleaseNoteResponse
The release note of a release.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
title |
string | The title of the note. | |
content |
string | The text of the note, in the format of contentType. | |
contentType |
string | plaintext, markdown or html. | |
links |
array of ReleaseNoteLink (8.4) | The links of the note. | |
isPublished |
boolean | Unpublished notes are only visible to the contributors of the package. | |
createdAt |
string (date-time, UTC) | When the note was created (UTC). | |
releasePublishedAt |
string (date-time, UTC) | When the release (not the note) was published; null for unpublished notes. | |
productVersionRequirement |
string | Product (ESM) version requirement of the release: a minimum (e.g. ">=12.1"), a maximum ("<=13.0") or a range ("12.1-13.0"); null when it has none. | |
UploadedReleaseResponse
An uploaded release as its vendor sees it, published or not.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
status |
string | E.g. pending, validating, available, available-with-issues, failed, publishing, published or revoked. A release can be published once it is available or available-with-issues. Values: failed, pending, published, cloning, compiling, publishing, available, available-with-issues, validating, empty, revoked. |
|
releaseNumber |
integer | Running number of the upload within the package. | |
uploadedAt |
string (date-time, UTC) | When the release was uploaded (UTC). | |
uploadedBy |
string | Who uploaded the release. | |
description |
string | The description from package.json. | |
productVersionRequirement |
string | Product (ESM) version requirement of the release: a minimum (e.g. ">=12.1"), a maximum ("<=13.0") or a range ("12.1-13.0"); null when it has none. | |
isCritical |
boolean | Whether the release is marked as critical update. | |
Response Parts
Objects within the responses.
InstalledPackage
A package stored as installed on an environment, in its installed version; the release id is null when the package was reported without one.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
Prerequisite
A package, the product or software an installation needs.
| Field | Type | Description | |
|---|---|---|---|
type |
string | package, product or software. | |
packageId |
string | The package id, for packages. | |
releaseId |
string | The release to install, for packages. | |
name |
string | The name of the package, product or software. | |
vendorName |
string | The name of the vendor. | |
version |
string | The version to install or installed (for the product: the environment's product version); null when it can't be resolved, and for software. | |
requiredVersion |
string | The version (range) required, e.g. by the depending package or for software; null for the release itself. | |
isInstalled |
boolean | Whether the environment has the package installed already. | |
isContentSigned |
boolean | Whether the content of the package is signed. | |
mismatch |
string | Why the prerequisite can't be met as required, e.g. version-mismatch; null when it can. Values: circular-dependency, version-mismatch, accessibility-mismatch, unreachable-due-to-no-access, unreachable-due-to-not-published-or-obsolete, unknown, not-publicly-available, incompatible-version-installed, unreachable-due-to-not-stable, product-version-mismatch. |
|
description |
string | For software: what it is. | |
downloadUrl |
string | For software: where to get it. | |
documentationUrl |
string | For software: its documentation. | |
ReleaseConflict
Why a release can't be installed. The package, release and version are the ones the package in conflict would get; release and version are null when it can't be resolved.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
type |
string | dependency-mismatch (the dependency PackageId can't be resolved as requiredVersion, see mismatch) or breaks-installed-package (installing PackageId in Version violates the requiredVersion of the installed package installedPackageId). |
|
requiredVersion |
string | The version (range) required of the package: by the dependency of the release (dependency-mismatch) or by the installed package (breaks-installed-package). | |
mismatch |
string | dependency-mismatch: why the dependency can't be resolved, e.g. version-mismatch. Values: circular-dependency, version-mismatch, accessibility-mismatch, unreachable-due-to-no-access, unreachable-due-to-not-published-or-obsolete, unknown, not-publicly-available, incompatible-version-installed, unreachable-due-to-not-stable, product-version-mismatch. |
|
installedPackageId |
string | breaks-installed-package: the installed package whose requirement would be violated. | |
installedVersion |
string | breaks-installed-package: the installed version of that package. | |
installedReleaseId |
string | breaks-installed-package: the installed release of that package; null when it was reported without one. | |
ReleaseNoteLink
A link of a release note.
| Field | Type | Description | |
|---|---|---|---|
name |
string | The text of the link. | |
url |
string | The URL of the link. | |
SkippedRelease
A newer release that can't be installed.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package id, as in package.json. | |
releaseId |
string | The id of the release. | |
version |
string | The version of the package. | |
conflicts |
array of ReleaseConflict (8.3) | Why it can't be installed. | |
Request Parts
Objects within the request bodies; the bodies themselves are shown at their endpoints.
InstallationLogEntry
An entry of an installation log; time and message are stored as given.
| Field | Type | Required | Description |
|---|---|---|---|
time |
string | no | When the entry was written, e.g. 2026-10-29T10:15:07Z. |
level |
string | no | The log level: debug, trace, info, warning, error or critical; the case doesn't matter. |
message |
string | no | The log message. |
ReleaseNoteLinkInput
A link of a release note.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | The text of the link; unique within the note. |
url |
string | yes | The URL of the link. |
ReportedPackage
A package installed on the environment.
| Field | Type | Required | Description |
|---|---|---|---|
packageId |
string | yes | The package id (GUID) as in package.json. |
version |
string | yes | The installed version, e.g. 1.2.0. |
releaseId |
string | no | The installed release, when known (e.g. from latest); it must be a release of the package in this version. Versions aren't unique per package, the release id is. |
Error
The error every endpoint answers with, see 2. Errors.
ErrorResponse
The error of every v1 endpoint (RFC 9457 problem details, application/problem+json); its HTTP status code is also the response's status code.
| Field | Type | Description | |
|---|---|---|---|
type |
string | Identifies the kind of error as URI (RFC 9457), e.g. https://extensions.matrix42.com/problems/not-found; the same as code, which is easier to compare. | |
status |
integer | The HTTP status code of the response. | |
code |
string | Stable error code, e.g. not-found; each endpoint lists its codes with its responses. | |
title |
string | Short summary of the status, e.g. "Not Found". | |
detail |
string | What went wrong, for humans. | |
instance |
string | The path of the request. | |
traceId |
string | Identifies the request in the server logs. | |
errors |
array of ValidationError (10.3) | The invalid request values. | |
data |
ErrorData (10.2) | Further information about the error, depending on the code. | |
ErrorData
Further information about an error; which values are set depends on the code, each endpoint names them with its responses.
| Field | Type | Description | |
|---|---|---|---|
packageId |
string | The package the error is about. | |
releaseId |
string | The release the error is about. | |
version |
string | The version the error is about. | |
packageName |
string | package-name-exists: the name of the uploaded package. | |
existingPackageId |
string | package-name-exists: the package id of the existing extension of that name, if it has one. | |
uploadedPackageId |
string | package-name-exists: the package id of the uploaded package. | |
productVersion |
string | The product (ESM) version the request was checked against. | |
productVersionRequirement |
string | incompatible-release: the product version requirement of the release. | |
releases |
array of PublishedReleaseResponse (7.8) | no-compatible-release: all published releases of the package. | |
skippedReleases |
array of SkippedRelease (8.5) | no-installable-release: the releases that can't be installed, with the reasons. | |
unknownInstalledPackageIds |
array of string | no-installable-release: installed packages unknown to the server. | |
conflicts |
array of ReleaseConflict (8.3) | invalid-dependency-tree: the dependencies that can't be resolved. | |
ValidationError
An invalid request value; a field with several problems has one entry per problem.
| Field | Type | Description | |
|---|---|---|---|
field |
string | The invalid field as named in the request, e.g. installedPackages[1].releaseId. | |
pointer |
string | The invalid field in the JSON body as JSON pointer (RFC 6901, as RFC 9457 suggests), e.g. #/installedPackages/1/releaseId; not set for query and route parameters or form fields. | |
message |
string | What is wrong with it, for humans. | |