When this fires
Triggered (subscription.cancelled) when an active subscription is cancelled —
the subscriber turns off auto-renew, the creator blocks them, or moderation ends
the relationship. The subscriber usually keeps access until the end of the period
they already paid for; accessEndsAt tells you when that access stops.
Use this to react to churn the moment it is decided, instead of diffing
subscriber snapshots on a schedule.
Cancellation and expiry are distinct events.
subscription.cancelled fires when
a cancellation is scheduled (access typically continues until accessEndsAt).
subscription.expired fires when access
actually ends. A typical lifecycle emits subscription.cancelled first, then
subscription.expired when the paid period runs out.Requires the read:creator scope.Payload
recipientUuid: UUID of the creator who was subscribed tosubscriberUuid: UUID of the fan whose subscription was cancelledcancelReason: Why it was cancelled. One ofsubscriber_requested,creator_blocked,moderation.cancelledAt: ISO 8601 time the cancellation was recordedaccessEndsAt: ISO 8601 end of the already-paid period; access continues until then. EqualscancelledAtwhen access ends immediately (for example, free-trial cancellations). May benullif no paid period applies.clientReferenceId: The attribution reference captured on the original subscription purchase, echoed here so churn events carry the same attribution as thesubscription.newevent. Omitted when the subscription was not attributed. See Checkout Attribution.metadata: The custom metadata captured on the original subscription purchase, echoed here. Omitted when none was set.timestamp: ISO 8601 time the event was emitted