Skip to main content
Two read-only endpoints report App Store billing state. subscription-status gives the lifecycle of your app’s pricing plans for your own screens, and subscription/me tells you whether the signed-in user is entitled to your app, which is what you gate paid features on server-side. Both require the read:self scope.

Available endpoints

Get app pricing lifecycle

GET /apps/{appUuid}/subscription-status returns a lifecycle summary for an app you own and includes each pricing plan’s status.

Response fields

checkoutUrl is the Fanvue-hosted checkout page for the plan or one-time item. It is null for free, pending setup and withdrawn plans, and for a plan whose checkout link you disabled. Send buyers to this URL rather than building one by hand.

Example request

Example response

Error behaviour

  • 403: the authenticated user does not have access to this app.
  • 404: the app was not found or is not owned by the authenticated user.
  • 503: the environment is not configured to serve developer app subscription data.

Get current user subscription for an app

GET /apps/{appUuid}/subscription/me returns the authenticated user’s entitlement for the app, plus a managedCreators array with one record per creator the user is assigned to manage. The array is populated for agency team members and empty for everyone else.
The access token must come from the app identified by appUuid. If any other OAuth client issued the token, the call returns 403.

Response fields

Top-level fields describe the authenticated user’s own subscription state. Each managedCreators entry mirrors the top-level shape for one creator: userUuid (the creator’s UUID), hasActiveSubscription, status, planUuid, planName, currentPeriodEnd, cancelAtPeriodEnd.

Status values

Example request

Example response, creator with an active subscription

Example response, agency team member with two managed creators

Agency team members

Agency team members belong to one or more agencies and manage a set of creators. Acting as themselves they install nothing; an install or purchase made while switched into a managed creator’s profile belongs to that creator’s account. Two things follow from that.
  1. Top-level fields describe the team member’s own subscription, which is always empty: status: "none", hasActiveSubscription: false, planUuid: null. Render entitlement from managedCreators when you detect an agency context.
  2. Agency users receive 200, not 404. A non-agency user whose app lookup fails receives 404; an agency team member receives 200 with the empty top-level shape and a populated managedCreators array.
A team member sees only the creators they are assigned to manage. Chatters see their assigned subset, and admins see the agency’s creators. The read:self scope covers the managed-creator records, so you need no additional scope.

Iterating over managedCreators

For agency-aware surfaces, branch on managedCreators rather than the top-level subscription:
managedCreators holds at most 100 records. An agency with more than 100 assigned creators receives a truncated list, so do not treat the array as the full roster.A managed-creator lookup that fails upstream is dropped from the array rather than failing the call. Treat a missing creator as “no information”, not as “no subscription”, and retry rather than revoking access.

Error behaviour

  • 400: appUuid is not a valid UUID.
  • 401: bearer token missing or invalid.
  • 403: the token lacks read:self, or appUuid does not belong to the OAuth client that issued the token.
  • 404: App not found for this user. The app is not visible to this non-agency user. A user with no subscription record receives 200 with status: "none" instead.
  • 410: API version sunset.
  • 502: the upstream billing service returned an error.
  • 503: the environment is not configured to serve developer app subscription data.

Typical usage pattern

  1. Create your app in the Developer Area and configure it with an App Manifest.
  2. Authenticate a user with OAuth and request read:self.
  3. Use subscription-status in developer-facing surfaces to show plan lifecycle and to read each plan’s checkoutUrl.
  4. Use subscription/me in server-side logic to gate paid features. For agency-aware surfaces, also iterate managedCreators.
Testing guidance is in Test your app; pricing constraints are in App Store listing requirements.

Getting notified instead of polling

Both endpoints read current state. To hear about purchases, subscription activations, refunds and disputes as they happen, subscribe to app.payment.*, app.subscription.*, app.refund.created and app.dispute.*. App events has the payloads.

See also