These events track the lifecycle of a fan’s profile subscription to a creator,
independently of the money movement. They are the successor to the legacy
subscription.new, subscription.cancelled, and subscription.expired events.
Event (type) | Fires when |
|---|
creator.subscription.activated | A subscription becomes active (new subscriber or a lapsed one re-subscribes) |
creator.subscription.deactivated | A subscription ends and the fan loses access |
creator.subscription.cancel_at_period_end_changed | Auto-renew is turned off or back on; access continues until expires_at |
Requires the read:creator scope. Delivered in the
Standard-Webhooks envelope; the fields below
describe the data object.
A typical churn sequence is cancel_at_period_end_changed (auto-renew off,
access continues) followed by deactivated when the paid period runs out. A
failed renewal can deactivated a subscription with no prior
cancel_at_period_end_changed. Native profile subscriptions have no external
id — the subscription’s identity is the (purchaser, creator) pair.
Subscription resource
| Field | Type | Description |
|---|
object | string | Always "subscription" |
status | string | active, cancelled, or expired |
cancel_at_period_end | boolean | Whether auto-renew is currently off |
expires_at | string | null | ISO 8601 end of the paid period; access continues until then |
created_at | string | null | ISO 8601 time the subscription was created |
deactivation_reason | string | null | Why it ended (set on deactivated), e.g. expired, payment_failed |
client_reference_id | string | null | Your passthrough reference from the original purchase |
purchaser | object | { uuid, email } of the subscriber (email may be null) |
creator | object | { uuid } of the creator |
metadata | object | Your passthrough metadata map |
Example: creator.subscription.activated
{
"id": "f1a2b3c4-2222-4a2b-9c3d-aaaaaaaaaaaa",
"type": "creator.subscription.activated",
"timestamp": "2026-06-09T08:39:33.139Z",
"data": {
"object": "subscription",
"status": "active",
"cancel_at_period_end": false,
"expires_at": "2026-07-09T08:39:33.139Z",
"created_at": "2026-06-09T08:39:33.139Z",
"deactivation_reason": null,
"client_reference_id": "crm-contact-8821",
"purchaser": { "uuid": "fan-uuid", "email": "fan@example.com" },
"creator": { "uuid": "creator-uuid" },
"metadata": { "campaign": "spring-promo" }
}
}
Example: creator.subscription.deactivated
{
"id": "f1a2b3c4-3333-4a2b-9c3d-aaaaaaaaaaaa",
"type": "creator.subscription.deactivated",
"timestamp": "2026-07-09T08:39:33.139Z",
"data": {
"object": "subscription",
"status": "expired",
"cancel_at_period_end": true,
"expires_at": "2026-07-09T08:39:33.139Z",
"created_at": "2026-06-09T08:39:33.139Z",
"deactivation_reason": "expired",
"client_reference_id": "crm-contact-8821",
"purchaser": { "uuid": "fan-uuid", "email": "fan@example.com" },
"creator": { "uuid": "creator-uuid" },
"metadata": { "campaign": "spring-promo" }
}
}
The creator.subscription.cancel_at_period_end_changed event uses the same
resource shape with cancel_at_period_end reflecting the new state (true when
auto-renew was turned off, false when turned back on) and status still
active.