Stripe delivers billing signals into Licenzy
In a Licenzy checkout flow, your app does not forward Stripe lifecycle events manually. Stripe calls the tenant-facing Licenzy webhook endpoint directly after checkout, subscription, invoice, refund, and dispute activity occurs.
/v1/webhooks/stripe/tenant
Licenzy verifies the Stripe signature, enforces idempotency using stored Stripe event tracking, and turns those billing events into entitlement updates.
Async delivery, retries, and timing
Stripe delivery is asynchronous and retryable. A checkout success page can load before billing finalization has been processed, and the same Stripe event can be delivered more than once.
- Stripe webhook endpoints are called by Stripe, not by your application.
- Webhook processing must be idempotent because retries can happen.
- Access checks should tolerate a short delay while entitlement state is updated.
- Post-payment screens should poll or refresh backend access state instead of trusting the redirect.
Required tenant Stripe events
Subscribe the tenant webhook to the full event set Licenzy uses to finalize checkout and keep entitlements in sync:
checkout.session.completedcheckout.session.expiredcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.payment_succeededinvoice.payment_failedcharge.refundedcharge.dispute.createdcharge.dispute.closedrefund.createdrefund.updated
For the setup-specific workflow, see tenant webhook setup.