creator.* webhooks notify your backend in real time about activity across a
creator’s Fanvue account: on-platform payments, subscriptions, direct messages,
post and message engagement, refunds, and disputes. They are the successor to the
older flat platform events (purchase.new, subscription.new, message.received,
and so on).
Unlike the checkout webhooks, which are scoped to a
creator’s checkout-link sales, creator.* events cover the creator’s whole
platform feed. Each event carries the OAuth scope your app must hold to receive
it — see Available events.
creator.* events replace the legacy flat platform events (New Follower,
Purchase Received, Message Received, etc.). The legacy events are
deprecated but continue to fire during the migration window, so existing
integrations keep working. New integrations should use creator.*. See
Migrating from the legacy events.Setting up and verifying
Setup, testing, and signature verification are the same as for every Fanvue webhook:- Add an endpoint and select events in the Developer Area — see Webhooks Overview.
- Verify the
X-Fanvue-Signatureheader on every request — see Verify Webhook Signatures.
Amounts and currency
All monetary amounts are integers in the currency’s minor units (for USD, cents, so9999 means $99.99). Each resource carries its own currency (ISO
4217), which may be null when not yet known.
Event envelope
Everycreator.* webhook is delivered as an HTTP POST with this envelope:
id: unique event id, stable across delivery retries (use it to dedupe). Also delivered as the Standard-Webhookswebhook-id.type: the event name (one of the topics in Available events).timestamp: ISO 8601 time the event was emitted.data: the resource object.data.objecttells you the resource type (payment,subscription,follow,message,fan_message_read,post,reaction,refund,dispute,fan_status).
data are snake_case.
This is the same Standard-Webhooks
envelope the checkout events use. The
legacy flat platform events keep their original flat, camelCase payloads.
Attribution
Payment, subscription, follow, and refund/dispute resources echo two attribution fields when they were captured on the originating purchase:client_reference_id: your passthrough reference (string | null).metadata: your passthrough key/value map ({}when none was set).
Available events
Each group links to a reference page with full field definitions and example payloads. The scope column is the OAuth scope your app must hold for the event to be delivered.Event (type) | data.object | Scope | Reference |
|---|---|---|---|
creator.payment.succeeded | payment | read:creator | Payments |
creator.subscription.activated | subscription | read:creator | Subscriptions |
creator.subscription.deactivated | subscription | read:creator | Subscriptions |
creator.subscription.cancel_at_period_end_changed | subscription | read:creator | Subscriptions |
creator.message.received | message | read:chat | Messages |
creator.message.sent | message | read:chat | Messages |
creator.message.read | fan_message_read | read:chat | Messages |
creator.message.deleted | message | read:chat | Messages |
creator.message.reaction | reaction | read:chat | Messages |
creator.follow.created | follow | read:creator | Engagement |
creator.post.liked | post | read:post | Engagement |
creator.post.commented | post | read:post | Engagement |
creator.refund.created | refund | read:creator | Refunds and disputes |
creator.dispute.flagged | dispute | read:creator | Refunds and disputes |
creator.dispute.created | dispute | read:creator | Refunds and disputes |
creator.fan.status_changed | fan_status | read:chat | Fan status |
Migrating from the legacy events
The legacy flat events map ontocreator.* as follows. The creator.* payloads
are richer (full money breakdown, billing reason, attribution) and share one
envelope shape, so a single handler can process the whole domain.
| Legacy event | Replacement | Notes |
|---|---|---|
follow.new | creator.follow.created | — |
purchase.new | creator.payment.succeeded | source is post, message, or media |
tip.new | creator.payment.succeeded | source is tip |
subscription.new | creator.subscription.activated | — |
subscription.cancelled | creator.subscription.cancel_at_period_end_changed | Auto-renew turned off; access continues to expires_at |
subscription.expired | creator.subscription.deactivated | Access removed; see deactivation_reason |
message.received | creator.message.received | — |
message.sent | creator.message.sent | — |
message.read | creator.message.read | — |
During the migration window both the legacy event and its
creator.*
replacement fire. Subscribe to one or the other for a given concern to avoid
double-processing.