Skip to content

Publish an app to the marketplace

Listing requirements, automated checks, the immutable submission snapshot, the review path, publication and unlisting.

Updated 2 Sept 20263 min read
On this page

This page is for anyone who finished an app on a sandbox store and wants merchants to install it from the Dukkan marketplace. By the end you know what the listing needs, what the platform checks automatically, and what happens after submission through publication and beyond.

Before you list#

  • An app version with the final scopes, webhook topics and redirect URIs. Every topic must be covered by its scope; otherwise the server refuses to save the version.
  • HTTPS redirect URIs on a public host; localhost URIs are accepted for development only and flagged in review.
  • If the app requests clients:read, the data processing agreement is accepted by your team owner. See Data processing.
  • Pricing: free, a recurring subscription, or a one-time charge. Paid listings require a verified team, and prices are in Syrian pounds or US dollars.

Listing requirements#

From the app page open Listing and fill in:

Field Rule
Handle (handle) 3–60 characters of a-z, 0-9 and dashes; immutable after publication
Category one of operations, shipping, marketing, accounting, inventory, customer-support
Install URL HTTPS; the page where the merchant starts the authorization flow
Logo square PNG, JPEG or WebP, at least 256 × 256 px and up to 8 MB; required before submission
Name Arabic and English, up to 120 characters each
Tagline up to 160 characters per language
Description Markdown up to 20,000 characters per language
Features up to 10 items of 160 characters, per language
Support URL and privacy URL HTTPS, required per language
Terms URL HTTPS, optional

Both languages are required together; a single-language listing is refused.

The logo is uploaded from the Logo card once the draft has been saved. Your browser downscales it to at most 1024 × 1024 pixels before sending, and the file is stored and shown immediately. Uploading a new logo replaces the previous one. Screenshots are not part of app listings yet and will be announced in the changelog.

Automated checks#

On submission an immediate static scan runs and records its findings on the review tab. Blocking findings stop approval until resolved:

Code Severity What it checks
redirect_unparseable blocking a redirect URI that does not parse as a URL
redirect_not_https blocking an http redirect URI on a public host
redirect_loopback warning a localhost URI on a marketplace listing
topic_scope_mismatch blocking a webhook topic without its required scope in the version
listing_active_markup blocking script-capable markup (<script> and friends) in listing text
listing_url_lookalike blocking a URL containing dukkan on a host that is not dukkan.one
listing_url_credentials blocking a URL embedding a username or password

Internal notes for the reviewer are also recorded for sensitive scopes (clients:read, refunds:write, fulfillments:write) and for internationalized hosts (xn--); they do not block but draw attention.

The immutable submission snapshot#

Submission freezes everything the reviewer judges into one hashed snapshot: the app version (scopes, topics, redirect URIs, API version), the listing in both languages, the active prices, and media checksums. Whatever you edit after submitting does not change what is under review; and because the listing is frozen during review, editing a listing under review returns 409 until you withdraw the submission or it is decided.

The review path#

Status Meaning
submitted queued; first response within 5 business days at most
in_review a reviewer is working on it
changes_requested the reviewer returns the submission with a reason and a note you see on the review tab; fix, then submit again, and the old submission is withdrawn automatically
approved approved; Dukkan publishes it
rejected rejected with a reason
withdrawn you withdrew it

One open submission per listing at a time. The clock restarts when you resubmit. What the reviewer checks in detail is in the app review guidelines.

Published, and after#

  • On publication the listing becomes published and appears in the marketplace for merchants at the price frozen in the snapshot.
  • Updates: create a new version and submit again; it goes through the full path, and the published version stays available until the new approval replaces it.
  • Unlisting: you can unlist the listing so new installs stop while existing installs keep working. Dukkan also unlists on suspension; see App lifecycle.
  • Settlement: merchants pay through manual settlement confirmed by Dukkan, and your revenue appears in Earnings and payouts.