subscription resource. They are delivered in the Standard-Webhooks envelope; the fields below describe the data object. Every event requires the read:self scope.
Fanvue models cancellation as
cancel_at_period_end, not an immediate removal: a buyer who cancels keeps access until the end of the paid period.
The money and the access state are separate events: a subscription’s initial charge emits both app.payment.succeeded (with billing_reason: subscription_initial) and app.subscription.activated.
Subscription resource
data.object is "subscription" for both events.
Branch on
cancel_at_period_end, not on status. status is "active" on both events, including the cancellation, a cancelled subscription is still active until its period ends. A consumer switching on status sees no change at all when a buyer cancels.Examples
app.subscription.activated
app.subscription.cancel_at_period_end_changed
status stays "active", the buyer keeps access until the period ends, and plan.uuid is not carried on this event.
Reconciling
These events tell you that something changed, not when the period ends.app.subscription.deactivated is not emitted, expires_at and created_at are always null, and webhooks can be missed or delayed. Read live subscription state from the App Subscriptions endpoints rather than deriving it from events alone. Use the event as the trigger to re-read.