Edit in GitHubLog an issue

Packages

Use this resource to initiate and manage all aspects of submitting a package to the Marketplace Extension Quality Program (EQP). You can provide all metadata associated with a package, both the technical and the marketing information, in a single step, or in several steps, using incremental updates.

  • Technical information - References to code artifacts, such as Composer-compliant Magento 2 ZIP files, version compatibility, and release notes.

  • Marketing information - Includes package descriptions, images for icons and galleries, pricing information, support and installation services offered, and various guides (user, installation, and reference) in PDF.

Before submitting a package, you must first upload your files and associate the ID returned by the /rest/v1/files/uploads endpoint with your package using JSON parameters in the request body.

You can also check package submission status and retrieve testing information from the technical and marketing reviews.

A successful submission results in a package being published to the Commerce Marketplace.

EQP review process#

The EQP review process includes two steps:

  • In technical review, we perform all automated testing. This step also involves manual testing after all automated tests run.
  • In marketing review, we manually review all marketing content associated with your package before you can publish it on the Commerce Marketplace.

These review steps occur in parallel when you submit a package. If both steps are successful, the package can be published to the Commerce Marketplace. If there is a failure, you can iteratively fix issues until they are resolved.

Package submissions#

Copied to your clipboard
1POST /rest/v1/products/packages
2PUT /rest/v1/products/packages
3PUT /rest/v1/products/packages/:submission_id
4PUT /rest/v1/products/packages/:item_id

Submit a package#

You can submit a package in either of the following ways:

  • A single POST request with all required fields set. You must explicitly indicate that you are submitting for technical and marketing review using the action parameter.
    • If this package represents a newer version to an already existing extension, then also supply the sku parameter.
  • A series of requests, typically in the following order:
    1. A single POST request with the minimum required fields set and action set to draft in either technical, marketing, or both. This request accepts the new package and saves it on the Developer Portal for further updates. It returns a unique submission_id for subsequent PUT operations.
    2. One or more PUT requests in which you configure the package parameters. In these requests, set action to draft in technical, marketing, or both.
    3. A final PUT request indicating submission for technical, marketing, or both.

You can update one or more parameters in draft mode. In this mode, the API checks only for basic type-validation issues.

When the action field is set to submit, the API validates fields to ensure all required parameters are available on the Developer Portal to initiate the EQP process, and that parameters which depend upon each other match up correctly.

The following example shows a POST request with all required parameters set for both technical and marketing submissions:

Copied to your clipboard
1[
2 {
3 "action" : {
4 "technical" : "submit",
5 "marketing" : "submit"
6 },
7 "type" : "extension",
8 "platform" : "M2",
9 "version_compatibility" : [
10 {
11 "edition" : "CE",
12 "versions" : ["2.3", "2.4"]
13 },
14 {
15 "edition" : "EE",
16 "versions" : ["2.3", "2.4"]
17 },
18 {
19 "edition" : "ECE",
20 "versions" : ["2.3", "2.4"]
21 }
22 ],
23 "name" : "One Click Checkout",
24 "long_description" : "<Long description here>",
25 "release_notes" : "<Release notes here>",
26 "version" : "1.1.5",
27 "artifact" : {
28 "file_upload_id" : "5c11e656057b42.97931218.5"
29 },
30 "documentation_artifacts" : {
31 "user" : {
32 "file_upload_id" : "5c644d97bb7c41.37505716.6"
33 },
34 "installation" : {
35 "file_upload_id" : "5c644daf21fee4.39102137.2"
36 },
37 "reference" : {
38 "file_upload_id" : "5c644f4dcb1900.18508194.9"
39 }
40 },
41 "media_artifacts" : {
42 "icon_image" : {
43 "file_upload_id" : "5c129cd41ba478.65767699.1"
44 },
45 "gallery_images" : [
46 {
47 "file_upload_id" : "5c644fa344e5d7.04253635.8"
48 },
49 {
50 "file_upload_id" : "5c648b98446065.77844389.4"
51 },
52 {
53 "file_upload_id" : "5c648b984d0228.21794482.7"
54 },
55 {
56 "file_upload_id" : "5c648b98698ed0.64632056.3"
57 },
58 {
59 "file_upload_id" : "5c648b986a3d98.83415858.0"
60 }
61 ],
62 "video_urls" : [
63 "https://www.youtube.com/watch?v=l33T2-YC4tk",
64 "https://www.youtube.com/watch?v=682p52tFcmY"
65 ]
66 },
67 "categories" : [
68 "//Extensions//Payments & Security//Checkout Enhancements"
69 ],
70 "pricing_model" : {
71 "pricing_type" : "one-time",
72 "payment_period" : 1
73 },
74 "prices" : [
75 {
76 "edition" : "CE",
77 "currency_code" : "USD",
78 "price" : 15.50
79 },
80 {
81 "edition" : "EE",
82 "currency_code" : "USD",
83 "price" : 45.00,
84 "installation_price" : 0.00
85 },
86 {
87 "edition" : "ECE",
88 "currency_code" : "USD",
89 "price" : 30.00,
90 "installation_price" : 0.00
91 }
92 ],
93 "license_type" : "bsd"
94 }
95]

Since the API accepts batch requests for both POST and PUT operations, single submissions must be sent as an array containing one item.

If you save the request body to a file, for example, /tmp/one-click-submission-1.0.0.json, the following example shows the package submission process:

Copied to your clipboard
1curl -X POST \
2 -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \
3 -H 'Content-Type: application/json' \
4 --data-binary @/tmp/one-click-submission-1.0.0.json \
5 https://developer-stg-api.magento.com/rest/v1/products/packages
  • The API returns a HTTP 200 batch response listing items in the same order as they were provided in the request.
  • Each item contains a code and message indicating success or failure. Any non-200 code indicates an error. Refer to the message for more details.
  • A unique submission_id is returned for each successful item, which must be used for any subsequent GET or PUT methods.
  • Optionally, if a user-defined item_id was supplied during the POST, the response will echo back the same item_id for each item in the batch. The resource can be retrieved via GET using the item_id.
  • Any non-200 HTTP response code indicates an error for the entire batch request. See handling errors.

Update a package#

The PUT method can be used to update packages in the following states:

  • The package is in draft mode for the technical or marketing review; or both.
  • The package has been rejected in either the technical or marketing review; or both. You must fix these issues and re-submit the package.
  • The package has been released to the Commerce Marketplace.
  • The package was removed from Commerce Marketplace by the developer and needs to be re-published.
  • The package can be recalled while in the EQP pipeline.
  • After a package has been released to the Commerce Marketplace, you can update marketing information only. Changing marketing information causes the package to be placed in marketing review. The package continues to be live on the marketplace, and after the marketing approval, the updated fields will be published to the store.

You cannot modify a package during the EQP process, except to recall the package.

Updating several packages in a batch request is similar to the POST version above. The only difference is to supply submission_id for each item obtained from the POST request.

The PUT method also allows for updating a single package with submission_id as shown in the following example:

Request:

Copied to your clipboard
1curl -X PUT \
2 -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \
3 -H 'Content-Type: application/json' \
4 -d '{ "action" : { "marketing" : "submit"} }' \
5 https://developer-stg-api.magento.com/rest/v1/products/packages/f4eacd72be

The HTTP response code will indicate success or failure.

Required parameters#

If the action parameter gives a submit value for technical, marketing or both, the required parameters are listed below by their respective parallel EQP pipelines:

Technical#
ParameterComments
type
platform
version_compatibility
release_notes
version
skuOnly valid when a previous version exists
artifact
documentation_artifactsAt least the user guide must be supplied.
Marketing#
ParameterComments
name
long_description
documentation_artifacts
categories
media_artifactsThe icon, and at least one image in the gallery is required. The video urls are optional.
license_type
custom_license_nameOnly if license_type is custom.
custom_license_urlOnly if license_type is custom.
submission_idFor PUT commands.
Submission in several steps#

As described earlier, a submission can also be done in several steps in draft mode, followed by the action to submit for technical and/or marketing review. In such cases, the first POST request in draft mode can be done with a minimal set of parameters:

ParameterComments
type
platform
name
version
skuOnly valid when a previous version exists
long_description

With the returned submission_id, the remaining required parameters can be supplied using a PUT request in draft mode, and/or with an action to submit to either technical or marketing review; or both.

Get package details#

Copied to your clipboard
1GET /rest/v1/products/packages
2GET /rest/v1/products/packages/:submission_id
3GET /rest/v1/products/packages/skus
4GET /rest/v1/products/packages/skus/:url_encoded_sku
5GET /rest/v1/products/packages/items
6GET /rest/v1/products/packages/items/:item_id

There are various ways to retrieve package details, most of which are convenient alternatives to the typical way using submission_id for a specific package submission. The data returned is the same for the primary and the secondary ways.

The alternative ways provided are:

  • skus: Retrieves all versions of a particular package sku. An additional version filter is available to retrieve a specific sku and version.
  • item_id: Retrieves package details by specifying a user-defined unique item_id if one was supplied during the POST call.

The following basic endpoints retrieve all package details (every version of every package submitted):

Copied to your clipboard
1GET /rest/v1/products/packages
2GET /rest/v1/products/packages/skus
3GET /rest/v1/products/packages/items

This sample call lists all packages belonging to a user:

Copied to your clipboard
1curl -X GET \
2 -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \
3 https://developer-stg-api.magento.com/rest/v1/products/packages
  • The previous example shows one product only, but an array of products can be returned.
  • The sku and version will be determined from the code artifact (M2 zip file) meta-information (M2 composer.json), once it passes the malware checks.
  • The code, documentation, and media artifact files have additional info indicating meta-information on these files, including their current malware status.
  • The eqp_status field will indicate the current state of the package in the EQP process.
  • The short_description field will always be returned as an empty string. This field is no longer used. It is returned for backward compatibility.

To get additional details about the results of EQP testing, see EQP Test Reports

Sorting and Filtering#

The following fields enable both sorting and filtering support. Refer to the Package fields section above for valid values for certain fields):

FieldComments
typeExact string match
platformExact string match
item_idSub-string match
submission_idSub-string match
skuSub-string match
versionSub-string match
nameSub-string match
long_descriptionSub-string match
release_notesSub-string match
is_patchExact match
license_typeExact string match
custom_license_nameSub-string match
custom_license_urlSub-string match
requested_launch_datedate match, allows range
created_atdate match, allows range
modified_atdate match, allows range

A sample cURL request filtering all themes sorted by platform in ascending order and created_at in descending order:

Request:

Copied to your clipboard
1curl -X GET \
2 -H 'Authorization: Bearer baGXoStRuR9VCDFQGZNzgNqbqu5WUwlr.cAxZJ9m22Le7' \
3 https://developer-stg-api.magento.com/rest/v1/products/packages?type=theme&sort=+platform,-created_at

Response:

A list of theme packages can be returned in the same way as described in Get package details.

Package fields#

The following sections describe all package object properties. Unknown and readonly properties will be ignored in submissions.

action#

The actions to be taken towards technical or marketing review during a package POST or PUT submission.

TypeHTTP CommandsReview TypeFilter
objectPOST, PUT-no

JSON structures:

During the EQP process, it can take the following fields to control the parallel technical and marketing review flows:

Copied to your clipboard
1"action" : {
2 "technical" : "submit",
3 "marketing" : "submit"
4}
Technical/Marketing Field ValueTypeDescription
draftstringSave the supplied parameter values but take no further action.
submitstringSubmit to the EQP process.
recallstringRecall the earlier submission from the EQP process.

Once a package has been published to the store, this takes the following field:

Copied to your clipboard
1{
2 "action" : {
3 "overall" : "remove"
4 }
5}
ValueTypeDescription
removestringRemoves the package from the store.

action.marketing#

The actions to be taken towards a marketing review. Possible values:

  • draft (default)
  • submit (...to review)
  • recall (...from review)
TypeHTTP CommandsReview TypeFilter
stringPOST, PUT-no

action.overall#

General actions to be taken. Possible values:

  • remove(...from the store)
  • cancel (abandon this version)
TypeHTTP CommandsReview TypeFilter
stringPOST, PUT-no

action.technical#

Actions to be taken towards technical review. Possible values:

  • draft (default)
  • submit (...to review)
  • recall (...from review)
TypeHTTP CommandsReview TypeFilter
stringPOST, PUT-no

actions_now_available#

A comma-separated list of values currently valid in the action field for this package

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-no

artifact#

This is the package code artifact (ZIP file for Commerce) associated with this version.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTtechnicalno

JSON structure:

Copied to your clipboard
1"artifact" : {
2 "file_upload_id" : "5c11e656057b42.97931218.5"
3}

artifact.content_type#

The mime-type given when uploading the file. The value can be any valid mime-type.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-no

artifact.filename#

The filename given when uploading the file. The value can be any valid filename.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalno

artifact.file_hash#

The MD5 hash of the file.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-no

artifact.file_upload_id#

The only writable field of this sub-object, used to associate a file with this package version. The value is a unique file upload ID obtained from the Files API.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalno

artifact.malware_status#

The status of the malware check on the file. Possible values:

  • pass
  • fail
  • in-progress
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-no

artifact.size#

An integer indicating the size of the file, in bytes.

TypeHTTP CommandsReview TypeFilter
intGET, POST, PUT-no

artifact.url#

The link to download the file, if applicable. The value can be any valid URL.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-no

browser_os_compatibility#

The browser and its associated OS capabilities this package supports. The list of valid values for the browser_os_compatibility are:

Browsers:

  • chrome
  • firefox
  • safari
  • opera
  • edge

OS:

  • linux
  • mac
  • windows
TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

JSON structure:

Sample structure for a package supporting only Chrome and Firefox:

Copied to your clipboard
1"browser_os_compatibility" : {
2 "chrome" : {
3 "mac" : [ "39", "44"],
4 "windows" : ["43", "44"],
5 "linux" : ["43", "44"]
6 },
7 "firefox" : {
8 "mac" : [ "40", "41"],
9 "windows" : ["40", "41"],
10 "linux" : ["40", "41"]
11 }
12}

browsers#

A simplified way to specify browser compatibility. It is assumed that each browser listed is compatible on all platforms.

If browser_os_compatibility is also present, this field is ignored. Otherwise, if present, this field overwrites all previously stored compatibility rules for this package version.

The list of valid browsers is the same as for browser_os_compatibility.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

JSON structure:

Copied to your clipboard
1"browsers" : [
2 "chrome",
3 "firefox"
4]

categories#

A list of one to three categories, all from the same main category, expressed as a path for the package. For example, //Extension//Marketing//SEO/SEM. Note that the path separator is //, which allows for a single slash like SEO/SEM in the path name. Refer to the Marketplace Store for the current list of categories.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

created_at#

The UTC date and time the package was first submitted. The format is YYYY-MM-DD HH:MM:SS.

TypeHTTP CommandsReview TypeFilter
DateTimeGET-yes

custom_license_name#

TypeHTTP CommandsReview TypeFilter
substringGET, POST, PUTtechnicalyes

The name of custom license. This value is required only if license_type is set to custom.

custom_license_url#

The valid URL that points to the license. This value is required only if license_type is set to custom.

TypeHTTP CommandsReview TypeFilter
substringGET, POST, PUTtechnicalyes

documentation_artifacts#

The user, installation, and reference PDF manuals. At least one of these is required for extensions, but not for shared packages.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTbothno

JSON structure:

Copied to your clipboard
1"documentation_artifacts" : {
2 "user" : {
3 "file_upload_id" : "5c644d97bb7c41.37505716.6"
4 },
5 "installation" : {
6 "file_upload_id" : "5c644daf21fee4.39102137.2"
7 },
8 "reference" : {
9 "file_upload_id" : "5c644f4dcb1900.18508194.9"
10 }
11}

documentation_artifacts.installation.file_upload_id#

The unique file upload ID of the installation manual PDF obtained from the Files API.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTbothno

documentation_artifacts.reference.file_upload_id#

The unique file upload ID of the reference manual PDF obtained from the Files API.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTbothno

documentation_artifacts.user.file_upload_id#

The unique file upload ID of the user manual PDF obtained from the Files API.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTbothno

eqp_status#

A sub-object describing the current status of the package in the EQP review process. This is a read-only field.

The overall value indicates where the package is in the EQP pipeline.

Additional details are provided in the two main EQP areas:

  • technical - Provides the current technical status.
  • marketing - Provides the current marketing status.
TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUT-no

JSON structures:

Copied to your clipboard
1"eqp_status" : {
2 "overall" : "in_progress",
3 "technical" : "draft",
4 "marketing" : "approved"
5}

eqp_status.marketing#

The current status of the package in the EQP marketing review process. Possible values:

ValueTypeDescription
draftstringThe package has not been submitted for marketing review.
awaiting_marketing_reviewstringThe package has been submitted to the marketing review queue.
in_marketing_reviewstringThe package is currently undergoing marketing review.
approvedstringThe package has passed the marketing review process.
approved_with_modifications_pendingstringThe package has passed the marketing review process, but some modifications are required.
rejectedstringThe package has failed the marketing review process.
recalledstringThe developer has recalled the package.
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-yes

eqp_status.overall#

The current status of the package in the overall EQP process. Possible values:

ValueTypeDescription
draftstringThe submission is in the draft state, not yet submitted to the EQP process.
in_progressstringThe submission is in the EQP pipeline. Refer to the technical and marketing status for more details.
approvedstringThe submission has been approved and pending release to the store.
released_to_storestringThe submission has been approved and is currently live on store.
developer_removed_from_storestringThe developer has removed the package from the store.
admin_removed_from_storestringThe EQP admin has removed the package from the store.
`canceled_by_developerstringThe developer has canceled the submission.
canceled_by_adminstringThe EQP admin has canceled the submission.
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-yes

eqp_status.technical#

The current status of the package in the EQP technical review process. Possible values:

ValueTypeDescription
draftstringThe package has not been submitted for technical review.
in_automationstringThe package has been submitted for technical review and is currently undergoing automated testing.
awaiting_manual_qastringThe package has passed all automated tests and is currently in the manual test queue.
in_manual_qastringThe package is currently undergoing manual testing.
approvedstringThe package has passed all tests.
rejectedstringThe package has failed automation or manual tests.
recalledstringThe developer has recalled the package.
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-yes

external_services#

The list of services that the extension integrates with. The value is a sub-object.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

external_services.is_saas#

Indicates whether this integration is a gateway to a SaaS service (true or false).

TypeHTTP CommandsReview TypeFilter
booleanGET, POST, PUTmarketingno

external_services.items#

An array containing descriptions of the site(s) the extension integrates with. Only zero or one items are currently supported.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

external_services.items[0].name#

The name of the integrated site.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

external_services.items[0].owner#

Defines the owner of the service. Possible values:

  • self
  • 3rd_party
  • unknown
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

external_services.items[0].pay_to#

Defines who receives any payments. Possible values:

  • self
  • 3rd_party
  • both
  • none
  • unknown
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

external_services.items[0].url#

The URL of the integrated site.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

item_id#

A developer-defined unique ID assigned to the package (if available). If a value is supplied, it must be unique for every POST request.

TypeHTTP CommandsReview TypeFilter
substringGET, POST, PUT-yes

latest_launch_date#

The UTC date and time this version of the package was last released to the store. The format is YYYY-MM-DD HH:MM:SS.

TypeHTTP CommandsReview TypeFilter
DateTimeGET-yes

launch_on_approval#

Indicates whether to publish to the store as soon as all tests are passed (true or false). Effectively, sets requested_launch_date to a point in the past.

TypeHTTP CommandsReview TypeFilter
booleanGET, POST, PUTmarketingno

license_type#

The license type supported by the package. See Additional notes for a list of valid license types.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalyes

limit#

Along with offset, used for paging the collection of packages. The value can be a positive integer or -1, indicating for unlimited. The default is 20.

TypeHTTP CommandsReview TypeFilter
integerGET-no

long_description#

The long description for the package. The value can be any string.

TypeHTTP CommandsReview TypeFilter
substringGET, POST, PUTmarketingyes

marketing_options#

Additional marketing options that apply to this package can be provided if applicable. While this information is not currently used, it may become searchable for buyers in the future, so is potentially worth filling out if relevant. See Additional notes for more information.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

JSON structure:

Copied to your clipboard
1"options" : {
2 "released_with_setup_scripts" : true,
3 "included_service_contracts" : false,
4 "included_external_service_contracts" : true,
5 "support_responsive_design" : true,
6 "custom_implementation_ui" : true,
7 "support_web_api" : true,
8 "support_test_coverage" : false
9}

max_version_launched#

A sub-object that describes the highest version of this package that has been released to the store. It contains fields submission_id, version, eqp_status, with the same meanings as the similarly named fields.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

media_artifacts#

A sub-object with zero to three fields that holds the package icon, gallery images, and optional video URLs.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

JSON structure:

Copied to your clipboard
1"media_artifacts" : {
2 "icon_image" : {
3 "file_upload_id" : "5c129cd41ba478.65767699.1"
4 },
5 "gallery_images" : [
6 {
7 "file_upload_id" : "5c644fa344e5d7.04253635.8"
8 },
9 {
10 "file_upload_id" : "5c648b98446065.77844389.4"
11 },
12 {
13 "file_upload_id" : "5c648b984d0228.21794482.7"
14 },
15 {
16 "file_upload_id" : "5c648b98698ed0.64632056.3"
17 },
18 {
19 "file_upload_id" : "5c648b986a3d98.83415858.0"
20 }
21 ],
22 "video_urls" : [
23 "https://www.youtube.com/watch?v=l33T2-YC4tk",
24 "https://www.youtube.com/watch?v=682p52tFcmY"
25 ]
26}

The video_urls property is optional.

media_artifacts.gallery_images#

An array of sub-objects describing the gallery images. Not required for shared packages.Each array element has the same structure as the artifacts field in this object.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

media_artifacts.icon_image#

The sub-object that holds the package icon. It has the same structure as the artifacts field in this object.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

media_artifacts.video_urls#

An array of Youtube video URLs listed in order of appearance in the gallery.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

modified_at#

The UTC date and time the package was last updated. The format is YYYY-MM-DD HH:MM:SS

TypeHTTP CommandsReview TypeFilter
DateTimeGET-yes

name#

The name or title of the package. Duplicate names are not allowed.

TypeHTTP CommandsReview TypeFilter
substringGET, POST, PUTmarketingyes

offset#

In combination with the limit parameter, this field can be used for paging the collection of packages. The default value is 0. See Get package details for more information.

TypeHTTP CommandsReview TypeFilter
integerGET-no

original_launch_date#

The UTC date and time this version of the package was first released to the store. The format is YYYY-MM-DD HH:MM:SS

TypeHTTP CommandsReview TypeFilter
DateTimeGET-yes

platform#

The Magento platform compatibility of this package. Must be M2.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalyes

prices#

The list of prices in USD set for this package by edition, and the respective installation prices (if any). Editions must match version_compatibility.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

JSON structure:

Copied to your clipboard
1"prices" : [
2 {
3 "edition" : "CE",
4 "currency_code" : "USD",
5 "price" : 15.50
6 },
7 {
8 "edition" : "EE",
9 "currency_code" : "USD",
10 "price" : 45.00,
11 "installation_price" : 0.00
12 },
13 {
14 "edition" : "ECE",
15 "currency_code" : "USD",
16 "price" : 60.00,
17 "installation_price" : 0.00
18 }
19]

prices[N].currency_code#

The currency code for this price. Currently, the only valid value is USD.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

prices[N].edition#

The edition of Magento Open Source or Adobe Commerce for this price. Possible values:

  • CE
  • EE
  • ECE
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

prices[N].installation_price#

The value for the installation price of this package. This is only paid once, even for subscriptions. The value must be a number with up to two decimal places, such as 123.45.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

prices[N].price#

The value for the purchase price of this package. For subscriptions, this is the annual price. The value must be a number with up to two decimal places, such as 123.45.

TypeHTTP CommandsReview TypeFilter
numberGET, POST, PUTmarketingno

pricing_model#

Defines how to interpret the pricing for this package.

TypeHTTP CommandsReview TypeFilter
objectGET, POSTmarketingno

JSON structure:

Copied to your clipboard
1"pricing_model" : {
2 "pricing_type" : "subscription",
3 "payment_period" : 12
4}

pricing_model.payment_period#

For a package using the one-time payment model, the number 1 signifies once. For a subscription, how often (in terms of months) payments are due. Currently, only annual subscriptions are supported, so the value must either be 1 for "one-time" payments, or 12 for annual subscriptions.

TypeHTTP CommandsReview TypeFilter
stringGET, POSTmarketingno

pricing_model.pricing_type#

Specifies which pricing model is used by this package. Possible values:

  • one-time
  • subscription
TypeHTTP CommandsReview TypeFilter
stringGET, POSTmarketingno

priority#

The priority for this submission. Possible values:

  • high
  • medium
  • low
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUT-no

process_as_patch#

A flag to indicate the submission should follow the expedited process for patch releases.. Possible values:

  • yes
  • no
  • unknown
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalyes

release_notes#

The release notes for the package submission.

TypeHTTP CommandsReview TypeFilter
substringGET, POST, PUTtechnicalyes

requested_launch_date#

When the package should be released to the store. If not supplied, it will be released to the store after all checks have passed. The format is YYYY-MM-DD HH:MM:SS.

TypeHTTP CommandsReview TypeFilter
DateTimePOST, PUTmarketingyes

shared_packages#

The list of artifact objects. Listing here enables the "access rights" to these shared packages when a buyer purchases this package. Each shared package is specified by file_upload_id, or sku and version.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTtechnicalno

JSON structure:

Copied to your clipboard
1"shared_packages" : [
2 {
3 "artifact" : {
4 "file_upload_id" : "5c648b986aabc6.62305048.2"
5 }
6 },
7 {
8 "artifact" : {
9 "file_upload_id" : "5c648b986a70c0.11666567.3"
10 }
11 }
12]

shared_packages[N].artifact.file_upload_id#

The unique file upload ID of shared package file, obtained from the Files API.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTbothno

shared_packages[N].artifact.sku#

The SKU of the shared package file.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTbothno

shared_packages[N].artifact.version#

The version of the shared package file.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTbothno

short_description#

Obsolete. This value was the short description for the package, but now will always be returned as an empty string.

TypeHTTP CommandsReview TypeFilter
stringGET-no

sku#

The SKU generated from metadata in the code artifact. Only specified in a POST when creating another version of an existing extension.

TypeHTTP CommandsReview TypeFilter
substringGET, POST-yes

sort#

A comma-separated list of fields to sort the list, each field prefixed by - for descending order, or + for ascending order. See Get package details for more information.

TypeHTTP CommandsReview TypeFilter
stringGET-no

stability#

The version's build stability. Possible values:

  • stable
  • beta
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingyes

submission_id#

A globally unique ID assigned to a package when it is submitted in a POST request. All further references to this package using GET or PUT requests can be made supplying this identifier.

TypeHTTP CommandsReview TypeFilter
substringGET, PUT-yes

support_tiers#

A list of up to three support tiers per edition. Not used for subscriptions.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

JSON structure:

Up to three tiers per edition (CE (Open Source), EE (Commerce), ECE (Cloud)) can be supported:

Copied to your clipboard
1"support_tiers" : [
2 {
3 "tier" : 1,
4 "edition" : "CE",
5 "monthly_period" : 1,
6 "short_description" : "<Short description goes here.>",
7 "long_description" : "<Long description goes here.>",
8 "prices" : [
9 {
10 "currency_code" : "USD",
11 "price" : 25.00
12 }
13 ]
14 },
15 {
16 "tier" : 2,
17 "edition" : "CE",
18 "monthly_period" : 3,
19 "short_description" : "<Short description goes here.>",
20 "long_description" : "<Long description goes here.>",
21 "prices" : [
22 {
23 "currency_code" : "USD",
24 "price" : 75.00
25 }
26 ]
27 },
28 {
29 "tier" : 3,
30 "edition" : "CE",
31 "monthly_period" : 6,
32 "short_description" : "<Short description goes here.>",
33 "long_description" : "<Long description goes here.>",
34 "prices" : [
35 {
36 "currency_code" : "USD",
37 "price" : 100.00
38 }
39 ]
40 },
41
42 {
43 "tier" : 1,
44 "edition" : "EE",
45 "monthly_period" : 1,
46 "short_description" : "<Short description goes here.>",
47 "long_description" : "<Long description goes here.>",
48 "prices" : [
49 {
50 "currency_code" : "USD",
51 "price" : 50.00
52 }
53 ]
54 },
55 {
56 "tier" : 2,
57 "edition" : "EE",
58 "monthly_period" : 9,
59 "short_description" : "<Short description goes here.>",
60 "long_description" : "<Long description goes here.>",
61 "prices" : [
62 {
63 "currency_code" : "USD",
64 "price" : 60.00
65 }
66 ]
67 },
68 {
69 "tier" : 3,
70 "edition" : "EE",
71 "monthly_period" : 12,
72 "short_description" : "<Short description goes here.>",
73 "long_description" : "<Long description goes here.>",
74 "prices" : [
75 {
76 "currency_code" : "USD",
77 "price" : 70.00
78 }
79 ]
80 },
81
82 {
83 "tier" : 1,
84 "edition" : "ECE",
85 "monthly_period" : 1,
86 "short_description" : "<Short description goes here.>",
87 "long_description" : "<Long description goes here.>",
88 "prices" : [
89 {
90 "currency_code" : "USD",
91 "price" : 45.00
92 }
93 ]
94 },
95 {
96 "tier" : 2,
97 "edition" : "ECE",
98 "monthly_period" : 6,
99 "short_description" : "<Short description goes here.>",
100 "long_description" : "<Long description goes here.>",
101 "prices" : [
102 {
103 "currency_code" : "USD",
104 "price" : 60.00
105 }
106 ]
107 }
108]

support_tiers[N].edition#

Which Magento edition this support is for. Possible values:

  • CE
  • EE
  • ECE
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTmarketingno

support_tiers[N].monthly_period#

How many months the support lasts. The value can be 1, 3, 6, 9, or 12

TypeHTTP CommandsReview TypeFilter
intGET, POST, PUTmarketingno

support_tiers[N].prices#

Array of prices for this support level. One item per currency code.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

support_tiers[N].prices[0].currency_code#

The currency code for this price. Currently, only USD is supported.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

support_tiers[N].prices[0].price#

The cost of this support level. The value must be a number with up to two decimal places, such as 123.45.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTmarketingno

support_tiers[N].tier#

Which of the three support tiers (numbered 0-2 or 1-3).

TypeHTTP CommandsReview TypeFilter
intGET, POST, PUTmarketingno

technical_options#

Additional technical options that apply to this package can be provided if applicable. These options are relevant to the technical review.

See Additional notes.

TypeHTTP CommandsReview TypeFilter
objectGET, POST, PUTmarketingno

JSON structure:

Copied to your clipboard
1"options" : {
2 "page_builder_new_content_type" : true,
3 "page_builder_extends_content_type" : false,
4 "page_builder_used_for_content_creation" : true
5}

type#

The type of package. Possible values:

  • extension
  • theme
  • shared_package
  • all (default).
TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalyes

version#

The version of this package, in the form major.minor.patch, such as 2.4.3.

TypeHTTP CommandsReview TypeFilter
substringGET, POSTbothyes

version_compatibility#

A list of Magento versions that this package supports. Must match the editions in prices.

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTtechnicalno

JSON structure:

For a new Magento 2 package:

Copied to your clipboard
1"version_compatibility" : [
2 {
3 "edition" : "CE",
4 "versions" : ["2.3", "2.4"]
5 },
6 {
7 "edition" : "EE",
8 "versions" : ["2.4"]
9 },
10 {
11 "edition" : "ECE",
12 "versions" : ["2.4"]
13 }
14]

version_compatibility[N].edition#

Must be M2.

TypeHTTP CommandsReview TypeFilter
stringGET, POST, PUTtechnicalno

version_compatibility[N].versions#

A list of Magento Open Source/Adobe Commerce versions that this package supports in the given edition. The value must be an array of version strings, such as ["2.3","2.4"].

TypeHTTP CommandsReview TypeFilter
arrayGET, POST, PUTtechnicalno

Additional notes#

  • For required fields in a POST or PUT operation, see the Required Parameters section.
  • The Review Type column indicates which part of the EQP review pipeline reviews the field values.
  • The Filter column indicates whether a field can be used for filtering and sorting in GET requests.
  • The Type column value "substring" means a string which, when filtered, searches for a substring match rather than an exact match.
  • The list of valid values for license_type are:
    • afl—Academic Free License 3.0 (AFL)
    • apache—Apache License 2.0
    • bsd—BSD 2-Clause License
    • gnu-gpl—GNU General Public License 3.0 (GPL-3.0)
    • gnu-lgpl–GNU Lesser General Public License 3.0 (LGPL-3.0)
    • mit—MIT License (MIT)
    • mozilla—Mozilla Public License 1.1 (MPL-1.1)
    • osl—Open Software License 3.0 (OSL-3.0)
    • custom—Custom License
  • Privacy
  • Terms of Use
  • Do not sell my personal information
  • AdChoices
Copyright © 2022 Adobe. All rights reserved.