Skip to main content

App Types & Tiers

Every app on LaunchMyStore has both a type and a tier. The type controls distribution and marketplace visibility; the tier controls quotas (API rate limits, supported features). They are independent — a private app can be on any tier; a marketplace public app can be on free.

App types

The type field on the Apps row identifies the distribution model. The enum has exactly three values: public, private, and first-party.
There is no “custom” app type. Some marketplace UIs use the word “custom” colloquially for private apps that were built for a specific merchant; the underlying enum value is private.

public

The default for marketplace distribution.
  • Listed in the marketplace at /marketplace.
  • Discoverable via search, category browse, and editorial collections.
  • Requires the standard review flow before going live (draftreviewpublished).
  • Subject to the marketplace’s listing requirements: icon, screenshots, long description, privacy policy URL, support email.
  • Install metrics (installs, uninstalls, reviews) feed into the marketplace ranking.
Use public when you want any LaunchMyStore merchant to be able to discover and install your app without you preapproving them.

private

The most restricted type — invisible to the marketplace.
  • Not listed anywhere in the marketplace UI.
  • Installable only on the developer’s own store — the store that created the app. There is no whitelist mechanism; any other store attempting to install gets 404 App not found. Install via the Developer Portal’s Install on My Store button.
  • Skips the marketplace review queue. Installable by the owning developer’s store immediately in any status (draft/review/ published) and fully usable there — embedded admin, app proxy, OAuth, and theme app blocks all work without marketplace publication. (Publication only matters for public/first-party distribution to other merchants.)
  • Useful for:
    • Apps written for your own store (custom integrations).
    • Internal tooling that wraps the LaunchMyStore API for your organization’s store.
    • To run the same code on multiple stores, publish it as a public app (each of your stores then installs it from the marketplace) — private apps cannot be shared across stores.
Private apps still need OAuth scopes declared in app.json and go through the same token grant as a public app. The differences are discoverability (never listed) and installability (your own store only).
A private app with an external appUrl receives its first Admin API access token the same way a public app does: installing it (Developer Portal → Install on My Store) redirects the browser to your /auth install handoff with a single-use code to exchange at POST /apps/oauth/token. App Bridge session tokens authenticate the embedded user to your backend — they are not Admin API credentials.

first-party

Apps published by LaunchMyStore itself or strategic partners.
  • Surfaced in dedicated cards/collections inside the marketplace UI (e.g. “Apps by LaunchMyStore”, “Recommended for new stores”).
  • Bypass the standard public review queue (vetted ahead of time).
  • May have access to internal APIs not available to public apps — e.g. surfaces in admin areas that public apps cannot inject into.
  • The Apps.type enum stores them as first-party (with the hyphen); do not confuse with firstParty or FIRST_PARTY in code-style contexts.
Developers cannot self-declare first-party — the type is set by LaunchMyStore staff during onboarding.

Choosing a type

1

Built for your own store?

Choose private. Faster to ship, no review queue — installable only on the developer’s own store.
2

Distributing to multiple unrelated merchants?

Choose public. Submit through the marketplace review flow once; every approved merchant can install themselves.
3

Working with the LaunchMyStore team?

first-party is granted by LaunchMyStore. You don’t pick this yourself.

App tiers

The tier field controls the app’s API rate limit and (in some cases) which platform features it has access to. The enum has four values: free, basic, pro, and enterprise. See API Rate Limits for the full sliding-window rate-limit spec and the X-RateLimit-* response headers.

What each tier unlocks

Free

20 req/sec to /api/v1/. Suited to dev stores and internal prototypes. Webhooks count zero against the rate cap — design around webhooks where possible.

Basic

40 req/sec. Default for new public apps. Bulk endpoints (metafields, products) work just fine at this tier for typical sync workloads.

Pro

100 req/sec. Recommended for apps with high-frequency polling or backfill workers. Comes with access to extended diagnostics in the developer dashboard (function execution timings, webhook delivery breakdowns).

Enterprise

500 req/sec. For ERP integrations and data-warehouse syncs. Requires sales/partnership approval — contact LaunchMyStore support.

Choosing a tier

  • Start at basic when publishing — this is the default.
  • Upgrade to pro when your worker logs 429 responses against your dev store more than once per merchant-day.
  • Request enterprise for any integration that needs to ingest hours of historical data in minutes (ERP onboarding, analytics warehouses, replatform migrations).
  • Use free for dev stores during development to keep your bills accurate to production.

Tier changes propagate within 60 seconds

The rate-limit guard caches tier lookups in-process for 60 seconds. A tier upgrade approved on the dashboard takes up to one minute before your worker sees the higher cap.

Type and tier together

The two settings are independent. Examples of valid combinations:

Where they are set

Both values are visible on the app’s detail page in the developer dashboard and in the GET /apps/developer API response.

Lifecycle interactions

Type and tier do not change the app’s lifecycle — the install/update/uninstall flow is identical for all combinations. Specifically:
  • All types use the same OAuth flow for granting scopes.
  • All types fire webhooks with the same HMAC-signed wire format.
  • All types must declare permissions in app.json.
  • All types are subject to function active limits (independent of tier).

See also

App Manifest

Manifest fields that depend on app type (e.g. permissions).

API Rate Limits

Tier-based sliding-window limits and best practices.

App Lifecycle

Install, update, uninstall flow shared by all types.

App Listing

What a public app needs to pass marketplace review.