Create and submit a version
Create a version, then submit it. Every entry inrequested_scopes needs a non-empty string in
scope_justifications.
Review states
A submission opens a review case that moves through a small state machine. Track it withGET /appstore/partner/review/cases/{id}.
The common path is
submitted → in_review → approved. A reviewer may route to
changes_requested (you act, then it returns to review) or rejected.
Message the review team
Each case carries a thread you share with the reviewer. Use it to explain design decisions, respond tochanges_requested, or ask questions. Decisions are also posted to the thread as
system messages, so the case is a complete record.
Scope justifications are required
What gets an app rejected
- Over-broad scopes — requesting
catalog:writewhen you only read, or bundling scopes “just in case.” Ask for the minimum; each scope must earn its justification. *oragent:admin— app tokens get no super-scope elevation, so these are never valid on a version. Request the exact resource scopes instead.- Weak webhook verification — the HMAC probe sends a bad signature and expects a
401. An endpoint that accepts it fails. See Webhooks. - Redirect URIs that don’t match — the authorize
redirect_urimust be in the app’s exact allowlist; wildcards or mismatches are blocked. - Vague or missing justifications — see above.
- Scopes the app doesn’t use — declaring topics or scopes the integration never exercises.
Next
Install flow (OAuth)
How merchants install an approved version.
Scopes
The full scope catalog.