app.* webhooks for every charge.
Create a plan
In the Builder (Developer area), open your app and go to Store Listing → Pricing, then Add Plan.
Fanvue takes 20% of each sale; you keep 80%.
Plan lifecycle
Read the same lifecycle over the API with
GET /apps/{appUuid}/subscription-status: each plan’s status plus an app-level overallStatus.
Plan IDs
Every plan has a UUID, shown in the Plan ID column of the pricing table; click it to copy the full value. You will use it in three places:- Deeplinks:
?plan=<planUuid>preselects the plan on your listing; add&action=checkoutto skip the picker. See Deeplinks. - Webhooks: the plan comes back as
item.uuidonapp.payment.*and asplan.uuidonapp.subscription.*events. - Entitlement:
GET /apps/{appUuid}/subscription/mereturns the buyer’s matchedplanUuid, which you compare against your feature tiers.
How buyers subscribe
A creator can reach checkout for a plan three ways:- Your listing’s plan picker.
- A deeplink with the plan preselected, or straight into checkout. Safe to send to broad audiences.
- A checkout link (
https://www.fanvue.com/checkout/app_...); buyers must be signed in.
What fires when someone subscribes
The money and the access state arrive as separate events:
The subscription payload does not tell you when access ends:
status stays active (including after a cancellation) and expires_at is always null, so branch on cancel_at_period_end, and read live state from GET /apps/{appUuid}/subscription/me (hasActiveSubscription, currentPeriodEnd, cancelAtPeriodEnd). app.subscription.deactivated is a reserved name that is not emitted.