Checkout webhooks use a different payload shape from the platform event
webhooks (New Follower, Purchase Received, etc.). They wrap a resource object
in a Standard-Webhooks envelope. See Event envelope.
The platform event webhooks keep their original flat payloads.
One subscription, both webhook families
Checkout webhooks and the platform event webhooks (follow.new, message.*, purchase.new, subscription.*, tip.new) are
delivered over the same creator-tenant subscription. There is no separate
receiver to configure for each family.
Which events actually reach you depends on how you subscribed (see
Configuring checkout webhooks):
- Zapier: each Zap subscribes to a single trigger, so add one Zap per event you want to act on.
- API or app: you choose exactly which events to subscribe to, so to receive
both families include the platform event types and the
checkout_link.*/payout.paidtypes. A subscription only delivers the events it was created with, so one set up for platform events alone won’t start sending checkout events until you add them.
Two entry points, depending on who you are. App builders add an endpoint
and tick the events (including the Checkout links group) in the App Store
Events tab; see Webhooks Overview.
Creators and no-code integrators use Configure webhooks in the
dashboard (Zapier or the connector API), see Configuring checkout
webhooks. Both authorize with
read:creator and
deliver the same events to the creator’s tenant.type (and, for checkout events, on data.object) to route each delivery to
the right handler.
Next steps:
- Configuring checkout webhooks: set up a receiver via Zapier or the API, and verify signatures.
- Attribution: attach your own
client_reference_idandmetadatato every event.
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.
For Buy Now, Pay Later (BNPL) sales, the processing currency is the currency
the fan is charged; the BNPL provider settles to Fanvue in USD. See BNPL
installments.
Event envelope
Every checkout webhook is delivered as an HTTPPOST 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,refund,dispute,installment,plan,payout).
data are snake_case.
Available events
All checkout events require theread:creator OAuth scope. Each group below
links to a reference page with full field definitions and example payloads.
Payments (reference)
checkout_link.payment.pending: a checkout payment is awaiting confirmationcheckout_link.payment.succeeded: a checkout payment succeeds (one-off, initial subscription, or renewal)checkout_link.payment.failed: a checkout payment fails
Subscriptions (reference)
A subscription is a fan’s active, recurring access to a product sold through a checkout link.checkout_link.subscription.activated: a subscription becomes activecheckout_link.subscription.deactivated: a subscription ends (expired or otherwise deactivated)checkout_link.subscription.cancel_at_period_end_changed: auto-renew is turned off or back on
Refunds and disputes (reference)
checkout_link.refund.created: a checkout payment is refundedcheckout_link.dispute.flagged: an early chargeback warning, before a formal disputecheckout_link.dispute.created: a formal dispute (chargeback) is opened
BNPL installments (reference)
Repayments on a Buy Now, Pay Later (BNPL) financed sale are financing movement, not new sales (see BNPL financing).checkout_link.installment.paid: a BNPL repayment (installment2..N) is collectedcheckout_link.installment.failed: a BNPL repayment attempt failscheckout_link.plan.completed: a BNPL plan is fully paid off
Payouts (reference)
payout.paid: a creator payout is paid out (creator-level, not link-scoped)
BNPL financing
BNPL is currently powered by Splitit.
- The sale is a normal
checkout_link.payment.succeededwithpaid_in_full: falseandinstallment: { number: 1, of: N }. - The later repayments (installments
2..N) arrive ascheckout_link.installment.paid(or.failed), not as newpayment.succeededevents. - When the plan is fully repaid you receive
checkout_link.plan.completed.