creator.* webhooks notify your backend in real time about activity across a creator’s Fanvue account: on-platform payments, profile and fan-experience subscriptions, direct messages, post and message engagement, refunds, disputes, and fan mute and presence changes. 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, and so on). 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: the event id, stable across delivery retries. Also delivered as the Standard-Webhookswebhook-id. Unique per event on everycreator.*topic exceptcreator.message.read, see Delivery, Retries and Idempotency before using it as an idempotency key.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
Two attribution fields travel with the resources that can carry them, but they are not populated uniformly across the domain:client_reference_id(string | null) carries a real value only on the subscription events. It is present but alwaysnulloncreator.payment.succeeded, and absent from every other resource.metadata({}when none was set) carries a real value on the subscription, refund, and dispute events. It is always{}on payment, follow, post, reaction, reward, message, and fan-status events.
metadata is carried, it is echoed from the original sale, so churn, refund and dispute events arrive with the attribution the purchase was made under. See Checkout Attribution for how these are 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.The two
creator.experience_subscription.* events do not fan out to every consenting app. Holding read:experience for the creator is necessary but not sufficient: they reach only the app that owns the experience, plus the creator’s subscribed connector destinations. See Experience subscriptions.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.
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.