Every public app is reviewed before it appears at platformdtc.com/apps. Part of the review is automatic and runs the moment you submit; the rest is done by a person on the review team. Go through this page before you submit and most apps pass the first time. Custom apps (installed by link on stores you choose) have no listing, so only their versions are reviewed. On your own development stores you can install any version before it is reviewed.

How review works

  1. You submit an app version (what your app does: scopes, webhooks, extensions) and, for a public app, its listing (what merchants read). See Versions & review and App Store listing.
  2. Automated checks run at once. A failed check sends the case back to you as changes requested, with the reason on each check.
  3. A reviewer installs your app on a test store and works through the manual checks below.
  4. The reviewer approves, asks for changes, or rejects. Every decision and every message is posted to the review case thread, which you can answer.
Fix what was asked and submit the same version again: it reopens the same review case and the checks run again. After a rejection, read why in the thread, fix it and submit again; that opens a new review case.

Checklist

Install and authentication

  • The app starts the OAuth install as soon as a merchant opens it: no sign-up form, no email step before authorization.
  • Every redirect URI uses https (no localhost, no tunnel URLs left from dtc app dev).
  • Your app URL is deployed and publicly reachable.
  • Embedded apps load inside the admin and authenticate with session tokens, not cookies.
  • Reinstalling, and re-authorizing after a new version, work without the merchant losing data.

Scopes

  • You request only the scopes your features use today.
  • Each scope has a one-sentence justification of at least 10 characters saying what the app does with it. Merchants read this text on the consent screen.
  • No * or agent:admin. Apps never get super-scopes.

Webhooks

  • Your endpoint verifies the X-Webhook-Signature on every request and answers 401 when it does not match. Review sends a request signed with the wrong secret to check this.
  • Your endpoint answers 2xx to app/health_check.
  • You handle app/uninstalled: stop calling the API for that install, and stop charging.
  • You subscribe only to topics you use.

Privacy (mandatory for every public app)

  • You handle all three compliance webhooks: customers/data_request, customers/redact and shop/redact. Each answers 2xx, or 401 for a bad signature.
  • You delete what you hold when asked (customers/redact, and shop/redact 48 hours after an uninstall), and send a merchant the data you hold when asked (customers/data_request), within 30 days.
  • Your privacy policy (an https URL on your listing) says what data you collect, why, and how long you keep it, and matches your scope justifications.

Billing

  • Every charge goes through the Billing API. No off-platform payment links, card forms or invoices for app fees.
  • Merchants can change plans from inside the app without reinstalling.
  • Your listing’s pricing matches your active pricing plans. At least one plan is set up.
  • Test charges work on a development store.

Listing

  • Tagline, intro, icon (square, at least 512 px), primary category and at least 3 screenshots, each with alt text.
  • Screenshots show your real app UI. No reviews, ratings, prices or awards in images.
  • Text describes only what the app does. No invented numbers, testimonials or “#1” claims.
  • A support email or support URL that a person answers.

Storefront

  • Storefront features use theme app blocks, embeds and pixels, never edits to the merchant’s theme code.
  • Your blocks render nothing when they have nothing to show, and don’t slow the page down.

What gets an app rejected

See What gets an app rejected. The most common reasons are over-broad scopes, a webhook endpoint that accepts a bad signature, missing compliance webhooks, and billing outside the Billing API.

After approval

  • New versions go through the same review. Installs move to the new version automatically unless it asks for new scopes; those merchants are asked to approve the new scopes first.
  • Keep your webhook endpoint healthy. Deliveries to an endpoint that keeps failing are paused and you are emailed; they resume on their own once your endpoint answers again.
  • An app can be delisted or suspended when it breaks these guidelines. The reason is shown on your app in the Partner Dashboard.