App Submission¶
How to submit an app¶
Submitting an app involves a few steps. The client must be logged in for all these steps and the user submitting the app must have accepted the terms of use.
- Validate your app. The validation will return a validation id.
- Post your app using the validation id. This will create an app and populate the data with the contents of the manifest. It will return the current app data.
- Update your app. Not everything that the Firefox Marketplace needs will be in the app, as the manifest does not contain all the data. Update the required fields.
- Create a screenshot. For listing on the Firefox Marketplace, at least one screenshot is needed.
- Attach content ratings. All apps need content ratings before being reviewed.
- Ask for a review. All apps need to be reviewed, this will add it to the review queue.
App Validation¶
Note
The validation does not require you to be authenticated, however you cannot create apps from those validations. To validate and then submit an app you must be authenticated with the same account for both steps.
-
POST
/api/v2/apps/validation/
¶ Request
For an Hosted App:
Parameters: - manifest (string) – URL to the manifest.
Example:
{"manifest": "http://test.app.com/manifest.webapp"}
Or for a Packaged App:
Parameters: - upload (object) – an object containing the appropriate file data in the upload field. It has the following properties:
- upload.type (string) – the content type for the file. In this case, the only valid type is application/zip.
- upload.data (string) – the zip file for your app, encoded in base 64.
- upload.name (string) – the file name.
Example:
{"upload": {"type": "application/zip", "data": "UEsDBAo...gAAAAA=", "name": "mozball.zip"}}
Response
Returns a validation result.
Status Codes: - 201 Created – successfully created, processed.
- 202 Accepted – successfully created, still processing.
-
GET
/api/v2/apps/validation/
(string: id)/
¶ Response
Returns a particular validation.
Parameters: - id (string) – the id of the validation.
- processed (boolean) – if the validation has been processed. Hosted apps are done immediately but packaged apps are queued. Clients will have to poll the results URL until the validation has been processed.
- valid (boolean) – if the validation passed.
- validation (string) – the resulting validation messages if it failed.
Status Codes: - 200 OK – successfully completed.
Example not processed:
{ "id": "123abcd", "processed": false, "resource_uri": "/api/v2/apps/validation/123abcd/", "valid": false, "validation": "" }
Example processed and passed:
{ "id": "123abcd", "processed": true, "resource_uri": "/api/v2/apps/validation/123abcd/", "valid": true, "validation": "" }
Example processed and failed:
{ "id": "123abcd", "processed": true, "resource_uri": "/api/v2/apps/validation/123abcd/", "valid": false, "validation": { "errors": 1, "messages": [{ "tier": 1, "message": "Your manifest must be served with the HTTP header \"Content-Type: application/x-web-app-manifest+json\". We saw \"text/html; charset=utf-8\".", "type": "error" }], }
Creating an App¶
-
POST
/api/v2/apps/app/
¶ Note
Requires authentication and a successfully validated manifest.
Note
You must accept the terms of use before submitting apps.
Note
This method is throttled at 10 requests/day.
Request
Parameters: - manifest (string) – the id of the validation result for your hosted app.
Or for a packaged app
Parameters: - upload (string) – the id of the validation result for your packaged app.
Response
Param: An apps. Status: 201 successfully created.
-
PUT
/api/v2/apps/app/
(int: id)/
¶ Request
Parameters: - name (string) – the title of the app. Maximum length 127 characters.
- categories (array) – a list of the categories, at least two of the category slugs provided from the category API.
- description (string) – long description. Some HTML supported.
- privacy_policy (string) – your privacy policy. Some HTML supported.
- homepage (string) – a URL to your apps homepage.
- support_url (string) – a URL to your support homepage.
- support_email (string) – the email address for support.
- device_types (array) – a list of the device types at least one of: desktop, mobile, tablet, firefoxos. mobile and tablet both refer to Android mobile and tablet. As opposed to Firefox OS.
- premium_type (string) – One of free, premium, free-inapp, premium-inapp, or other.
- price (string) – The price for your app as a string, for example “0.10”. Required for premium or premium-inapp apps.
- payment_account (string) – The path for the payment account resource you want to associate with this app.
- upsold (string) – The path to the free app resource that this premium app is an upsell for.
Response
Status Codes: - 202 Accepted – successfully updated.
Screenshots or videos¶
Note
Requires authentication and a successfully created app.
-
POST
/api/v2/apps/app/(int:id|string:app_slug)/preview/
¶ Request
Parameters: - position (int) – the position of the preview on the app. We show the previews in the order given.
- file (object) – a dictionary containing the appropriate file data in the upload field.
- file.type (string) – the content type.
- file.name (string) – the file name.
- file.data (string) – the base 64 encoded data.
Note
There is currently a restriction of 5MB on file uploads through the API.
Response
A screenshot resource.
Status Codes: - 201 Created – successfully completed.
- 400 Bad Request – error processing the form.
-
GET
/api/v2/apps/preview/
(int: preview_id)/
¶ Response
Example:
{ "addon": "/api/v2/apps/app/1/", "id": 1, "position": 1, "thumbnail_url": "/img/uploads/...", "image_url": "/img/uploads/...", "filetype": "image/png", "resource_uri": "/api/v2/apps/preview/1/" }
-
DELETE
/api/v2/apps/preview/
(int: preview_id)/
¶ Response
Status Codes: - 204 No Content – successfully deleted.
Content ratings¶
Note
Requires authentication and a successfully created app.
-
POST
/api/v2/apps/app/(int:id|string:app_slug)/content_ratings/
¶ Request
Parameters: - submission_id (string) – The submission ID received from IARC.
- security_code (string) – The security code received from IARC.
Response
Status Codes: - 201 Created – successfully assigned content ratings.
- 400 Bad Request – error processing the form.
Enabling an App¶
Note
Requires authentication and a successfully created app.
-
PATCH
/api/v2/apps/status/
(int: app_id)/
¶ Request
Parameters: - status (string) – a status you’d like to move the app to (see below).
- disabled_by_user (boolean) – Whether the app is disabled or not.
Response
Status Codes: - 200 OK – successfully completed.
- 400 Bad Request – something prevented the transition.
Key statuses are:
- incomplete: incomplete
- pending: pending, awaiting review
- public: public and listed on listing pages and search results
- unlisted: available only to those who know the URL and not listed on listing pages nor search results
- waiting: waiting for the developer to publish, currently private and only visible to the developer and team members
Valid transitions that users can initiate are:
incomplete to pending: call this once your app has been completed and it will be added to the Marketplace review queue. This can only be called if all the required data is there. If not, you’ll get an error containing the reason. For example:
{ "error_message": { "status": [ "You must provide a support email.", "You must provide at least one device type.", "You must provide at least one category.", "You must upload at least one screenshot or video.", "You must set up content ratings.", "You must set up a payment account." ] } }Once reviewed by the Marketplace review team, the app will be in one of the approved statuses (‘public’, ‘waiting’, or ‘unlisted’) and you can toggle between any of these statuses, e.g., waiting to unlisted.
disabled_by_user: by changing this value from True to False you can enable or disable an app.