Skip to main content
Not open yet. The marketplace opens to merchants once its first apps are reviewed. The listing, the checks and the submission below are live in the API, so you can prepare your app now; until the opening, a submission may wait longer than the turnaround Tassyir aims at. Ratings come after the opening. Every app starts as a custom app: it installs on its developer’s own businesses, or on the one business it names, and needs no review. To offer it to every Tassyir merchant, you list it: 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

  1. Deploy the version you want listed (tassyir deploy), with the compliance topics subscribed.
  2. In the developer console, set your account’s support email and emergency contact, and accept the developer terms.
  3. Write the listing (tassyir listing pull, edit, tassyir listing push) and upload its images in the developer console.
  4. Run the review checks: tassyir submit --checks-only.
  5. Submit: tassyir submit --distribution public.
An agent with the dev MCP server runs the checks with its 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.
When Tassyir publishes a new version of the terms, you accept it again before your next submission (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:
An endpoint that answers 2xx to anything, or that skips verification for a test delivery, fails the check.

The admin page in a frame

The dashboard shows admin.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.