A listing is shown under Tassyir’s name, so a person at Tassyir approves it
before merchants see it. Most of the review is automated: you can run the
same checks yourself, as often as you need, before you submit.
The steps
- Deploy the version you want listed (
tassyir deploy), with the compliance topics subscribed. - In the developer console, set your account’s support email and emergency contact, and accept the developer terms.
- Write the listing (
tassyir listing pull, edit,tassyir listing push) and upload its images in the developer console. - Run the review checks:
tassyir submit --checks-only. - Submit:
tassyir submit --distribution public.
run_review_checks tool. Submitting stays a
person’s decision: the tools never submit for you.
The listing
The listing belongs to the app, not to a version. You edit a draft at any time; the marketplace shows the live listing, which changes only when a review approves the draft. Write every text in Arabic and English.
Every text is plain text: no HTML, no Markdown link, no invisible or
control characters. Links are
https addresses on your own public domain
(port 443, no IP address, no Tassyir domain). Images are PNG, JPEG or WebP of
at most 2 MB, uploaded by their bytes in the developer console; the listing
names them by id (tassyir listing pull lists them).
tassyir listing pull writes the draft as tassyir.listing.json:
tassyir listing push sends the whole file as the draft (a field left out or
null is cleared). It is refused, with every problem at once
(LISTING_INVALID), only for what is never right: HTML in a text, a length
over its maximum, an unknown category, an image that is not the app’s. What
is still missing (the second language, a screenshot, the privacy policy) is
saved, and listed as issues, each with a fix. A submission needs none
left.
The developer terms
A submission needs the current developer terms accepted, in the developer console. They cover, among other things:- buyer data stays within what your scopes allow, and is deleted when the compliance topics ask;
- no block collects buyer contact data;
- no rating is bought, rewarded or pressured;
- Tassyir may pause an app at once when it harms merchants or buyers.
DEVELOPER_TERMS_REQUIRED). Apps already listed keep
working.
Your account also needs a support email and an emergency contact (an
email and a phone in international form) before a submission. Only you and
Tassyir staff read the emergency contact. In your first review, the reviewer
verifies who you are; the marketplace then shows “Verified developer”.
The review checklist
Every submission runs these checks first, in this order. A hard check that fails stops the submission (checks_failed): fix it and submit again. A
warning is for the reviewer.
Each result is
{ key, status, hard, message, fix }, where status is
pass, fail, warning, skipped (it does not apply, like webhooks for an
app without any) or error (Tassyir could not run it; never yours to fix,
and it never stops a submission).
Webhooks that refuse a forged signature
webhooks_verify_signatures sends two deliveries to every webhook endpoint:
a test delivery signed like a real one (marked tassyir-test: true), which
must get a 2xx, and one with a forged signature, which must get a 4xx. Verify
every delivery with @tassyir/app, answer 2xx to a test delivery, and 400
when verification fails:
The admin page in a frame
The dashboard showsadmin.page in a frame from https://app.tassyir.io.
Do not send X-Frame-Options: DENY or SAMEORIGIN, and if you send a
Content-Security-Policy with frame-ancestors, include
https://app.tassyir.io. The check sends no session, so a 401 or 403 is
fine.
Run the checks first
tassyir submit --checks-only runs the whole checklist on your draft listing
and latest version, exactly as a submission would, and submits nothing. It
fetches your privacy policy and admin page and sends the two test deliveries
to your endpoints, so it is limited to 5 runs per app per hour
(REVIEW_CHECKS_RATE_LIMITED, with retryAfterSeconds): fix everything one
run names before the next.
Submitting
tassyir submit --distribution public (or unlisted) snapshots the draft
listing and names your latest version. A --note reaches the reviewer:
test steps, a demo account on your service. A new submission replaces a
review still open, and so does any new upload of the app: a reviewer never
decides on something stale.
Tassyir aims to decide within 5 working days for a first listing and
2 working days for anything after (a resubmission, a listing update, a
new version); working days are Sunday to Thursday. An open review carries
its
turnaround. You get an email on each decision, and
tassyir submissions <id> shows the reviewer’s message and notes.
What a person checks
On top of the checklist, the reviewer installs your app on a dev store and checks that:- the app does what the listing says;
- each scope is used, and its reason is honest;
- the listing has no prices, testimonials, superlatives or Tassyir marks;
- the screenshots show the real app;
- storefront blocks look right in Arabic (right to left) and English;
- nothing collects buyer contact data in a block or sends data outside the hosts the merchant consented to.
New versions of a listed app
Once your app is listed, each upload is compared with the last approved version. Most updates are released by the automated checks alone; a version goes back to a person only for one of these reasons:
Dropping scopes or hosts, changing webhook topics within your scopes, data
definitions, settings labels or
admin.page: no person, released once the
checks pass. With a reason, the version waits for review and a review opens
by itself; add notes to it with the developer console, nothing else to
submit. tassyir submissions lists it.
An upload of a listed app must still subscribe the compliance topics and name
a supported API version, or it is refused before anything is stored
(REVIEW_CHECKS_FAILED). Whatever the review decides, an installation stays
on its version until a member of the business accepts the update, with a
consent screen when it adds scopes or hosts.
Ratings and reviews
Not live yet. Merchants rate the apps they use:- A business may rate an app it has had installed for at least 48 hours, or uninstalled within the last 45 days: 1 to 5 stars and an optional text of at most 1,000 characters, once (it can edit or delete its rating). Dev stores and your own businesses cannot rate your app.
- A text with a link, an email address or a phone number is refused, and so is abusive language. A rating is published at once.
- The merchant chooses to appear by the business’s name or as “A Tassyir merchant in {wilaya}”.
- The marketplace shows the average and the count, and the stars only from 3 ratings. A business no longer using the app is marked so.
- You reply once to each rating (and may edit the reply; the latest shows). You and merchants can report a rating; Tassyir staff hide what breaks the rules.
- Asking for a rating in exchange for anything, or pressuring a merchant, is against the developer terms.
Delisting and pauses
POST /developer/apps/:appId/delist takes your listed app out of the
marketplace and search: no new installs, and existing installations keep
working. relist brings it back (an app Tassyir delisted only Tassyir
relists).
Tassyir can pause an app at once when it harms merchants or buyers (a
leak, a broken app, a policy or legal problem). While paused, its API calls
and webhooks stop, its pages and blocks do not show, and it cannot be
installed; installations and their data are kept, so resuming restores
everything. You get an email with the reason; the merchants are told the
category only.
Errors
tassyir submit refuses, before sending anything, a draft with missing
fields (LISTING_INCOMPLETE); a failed hard check ends it with exit code 1
(SUBMISSION_CHECKS_FAILED), each check with its fix.