Skip to main content
Three events share the payment resource. They are delivered in the Standard-Webhooks envelope; the fields below describe the data object. checkout_link.payment.succeeded covers one-off purchases, initial subscription payments, and renewals. Branch on billing_reason to tell them apart.

Payment resource

Failure reasons

checkout_link.payment.failed carries a sanitised reason. Values are deliberately coarse: Fanvue’s risk screening is never disclosed, so declines it drives surface under neutral values. Two rules:
  1. You don’t retry charges yourself. Checkout is buyer-present: a failed one-time payment ends there unless the buyer tries again, and failed renewals enter Fanvue’s own retry schedule (dunning). Don’t treat the first failed renewal as churn.
  2. Use reason for ops and analytics: spotting a decline spike, deciding when to re-engage a buyer, reconciling failed revenue.

BNPL installments

When a fan finances a purchase with Buy Now, Pay Later (BNPL), Fanvue is paid upfront, so the sale still arrives as a single checkout_link.payment.succeeded. The only difference is that it is marked as a financed sale:
  • paid_in_full is false, and
  • installment is { "number": 1, "of": N } (the first of N installments).
The fan’s later repayments (installments 2..N) are financing movement, not new Fanvue sales. Fanvue has already been paid. Those repayments arrive as checkout_link.installment.paid / .failed events, not as further payment.succeeded events, and the plan finishing emits checkout_link.plan.completed. For a normal (non-financed) payment, installment is null and paid_in_full is true once collected.

Failure reasons

checkout_link.payment.failed carries a sanitised reason. Values are deliberately coarse: Fanvue’s risk screening is never disclosed, and declines it drives surface under neutral values. Two rules:
  • You don’t retry charges yourself. Checkout is buyer-present: a failed one-time payment ends unless the buyer tries again, and failed renewals enter Fanvue’s own retry schedule, so don’t treat the first payment.failed on a renewal as churn.
  • Use reason for ops and analytics: spotting a decline spike, deciding when to re-engage a buyer, and reconciling failed revenue.

Examples

The initial financed sale carries paid_in_full: false and installment: { number: 1, of: N }. gross is the full sale amount; currency is what the fan is charged (the processing currency). Repayments 2..N then arrive as installment events.