Publish an app to the marketplace
Listing requirements, automated checks, the immutable submission snapshot, the review path, publication and unlisting.
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;
localhostURIs 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
publishedand 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.