Skip to main content
creator.payment.succeeded fires when an on-platform payment to the creator settles: a paid post, a locked (PPV) message, a media purchase, a tip or a profile-subscription charge. It replaces the legacy purchase.new and tip.new events and carries the full money breakdown in one payload. The two reward events report affiliate and referral commission and use their own resource. All three require the read:creator scope. Each event arrives in the envelope, and the tables below describe data. Subscription money arrives on creator.payment.succeeded too. A profile subscription’s initial charge and every renewal fire it with source: "subscription" and billing_reason subscription_initial or subscription_renewal, alongside the access-state event on creator.subscription.*. Join the two with subscription.id. Checkout-link sales are a separate surface and fire checkout_link.payment.succeeded instead. creator.payment.pending and creator.payment.failed are reserved names. No Fanvue code path emits them and they can’t be subscribed to, so don’t build against them. Get earnings data is the API view of the same charges.

Payment resource

Amounts are integers in USD cents; Units and currency explains gross, net and the fees.

Attribution

Unlike the checkout-link surface, creator.payment.succeeded does not carry your passthrough attribution. client_reference_id is always null, metadata is always {}, and transaction_id is always null; the keys are present for shape parity only. Attribution that was captured at signup survives on the subscription events, which do echo real values.

Purchaser

handle and display_name are omitted from the payload rather than sent as null, so treat an absent key as “not resolved”.

Test deliveries

Test deliveries sent from the Developer Area differ from production in two fields. A test payload sets purchaser.email to test@example.com and transaction_id to the payment id, while a production payload sends null for both. Don’t build on either value.

Tracking

tracking is null when the buyer carries neither a tracking parameter nor an impression on one of this creator’s links. When present: link_url is last-touch across the whole platform while metadata is creator-scoped, so the two can disagree. A fan who arrived through creator A’s link and later buys from creator B reports A’s link here.

Example: creator.payment.succeeded (paid message)

Example: creator.payment.succeeded (subscription renewal)

The renewal charge for a profile subscription. subscription.id is the subscription’s initial-payment invoice number, the same token creator.subscription.renewed carries as its id.

Example: creator.payment.succeeded (tip on a post)

A tip sent on a post carries post_uuid and tip_context: "post". A tip sent anywhere else reports tip_context: "message" with post_uuid: null. Fanvue doesn’t record which surface a fan tipped from, so message means “not on a post” and is not evidence of a chat origin.
message_uuid is not a way to tell a chat tip from a post tip. Every paid tip writes a TIP chat message into the thread. That write happens after this event’s invoice snapshot is taken, so message_uuid is absent here even though GET /insights/earnings reports it for the same transaction. Use tip_context and post_uuid.

Reward resource

creator.reward.created and creator.reward.reversed share this resource. Rewards are account-level affiliate and referral earnings, not a sale to the creator’s own fans, so there is no purchaser.
  • creator.reward.created fires when a commission invoice is generated for the earner, a referral commission for a referrer, or an affiliate commission for an affiliate-link owner.
  • creator.reward.reversed fires when that commission is clawed back because the underlying sale was refunded or charged back. It carries the same id.

Example: creator.reward.created

creator.reward.reversed uses the identical shape with "type": "creator.reward.reversed" and the same id as the original creator.reward.created.