Skip to main content
Three events share the subscription resource. They are delivered in the Standard-Webhooks envelope; the fields below describe the data object.
A subscription is a fan’s active, recurring access to a product sold through a checkout link. Fanvue models cancellation as cancel_at_period_end plus an expires_at, not an immediate removal: a fan who cancels keeps access until expires_at, and the deactivated event fires when access actually ends.

Subscription resource

Examples

Managing subscriptions

The events above fire regardless of how a subscription changes. A creator can also drive cancel_at_period_end themselves, from the Fanvue dashboard or through the API. Listing requires the read:creator scope and the earnings:read creator permission. Cancel and uncancel require write:creator and monetization:manage. Full request and response shapes are in the API Reference.
These endpoints return the subscription in camelCase (cancelAtPeriodEnd, expiresAt), while the webhook data object above uses snake_case (cancel_at_period_end, expires_at). The same subscription reaches you under both spellings depending on which side you read it from.
A subscription scheduled to cancel is still status: active with cancelAtPeriodEnd: true. It only becomes expired at expiresAt, which is when deactivated fires. So status=cancelled lists subscriptions that are still running and still have access, not ones that have ended.
Only a cancellation the creator made themselves can be reversed. If the subscriber cancelled, or Fanvue support did, or the cancellation predates actor tracking and reports cancelledBy: null, uncancel returns 409 and the cancellation stands. In that case the subscriber restarts their own subscription by purchasing again. Cancelling a subscription whose renewal is still being retried stops further charge attempts immediately. Access has already lapsed, so the response reports status: expired and no webhook fires: deactivated was already emitted when the failed renewal ended the subscription.