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.- Top-level fields describe the team member’s own subscription, which is always empty:
status: "none",hasActiveSubscription: false,planUuid: null. Render entitlement frommanagedCreatorswhen you detect an agency context. - Agency users receive
200, not404. A non-agency user whose app lookup fails receives404; an agency team member receives200with the empty top-level shape and a populatedmanagedCreatorsarray.
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:
Error behaviour
400:appUuidis not a valid UUID.401: bearer token missing or invalid.403: the token lacksread:self, orappUuiddoes 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 receives200withstatus: "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
- Create your app in the Developer Area and configure it with an App Manifest.
- Authenticate a user with OAuth and request
read:self. - Use
subscription-statusin developer-facing surfaces to show plan lifecycle and to read each plan’scheckoutUrl. - Use
subscription/mein server-side logic to gate paid features. For agency-aware surfaces, also iteratemanagedCreators.
Getting notified instead of polling
Both endpoints read current state. To hear about purchases, subscription activations, refunds and disputes as they happen, subscribe toapp.payment.*, app.subscription.*, app.refund.created and app.dispute.*. App events has the payloads.