Skip to main content
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.activatedA subscription becomes active (new subscriber or a lapsed one re-subscribes)
creator.subscription.deactivatedA subscription ends and the fan loses access
creator.subscription.cancel_at_period_end_changedAuto-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

FieldTypeDescription
objectstringAlways "subscription"
statusstringactive, cancelled, or expired
cancel_at_period_endbooleanWhether auto-renew is currently off
expires_atstring | nullISO 8601 end of the paid period; access continues until then
created_atstring | nullISO 8601 time the subscription was created
deactivation_reasonstring | nullWhy it ended (set on deactivated), e.g. expired, payment_failed
client_reference_idstring | nullYour passthrough reference from the original purchase
purchaserobject{ uuid, email } of the subscriber (email may be null)
creatorobject{ uuid } of the creator
metadataobjectYour 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.