Refunds end access, and billing recovery
- Improved
- Fixed
Billing already handled the happy path. This release covers what happens after money comes back or an event arrives early.
Refunds and disputes end access
A refund or dispute now cancels the subscription in the kit: Stripe charge.refunded and charge.dispute.created, Polar refund.created and order.refunded, and Creem refund.created and dispute.created. A later active event for the same subscription cannot bring access back. Partial refunds follow the same rule, and there is no credit ledger.
Unmatched webhooks
A webhook the kit can handle but cannot tie to an organization is kept as failed with the reason unmatched_organization. A platform admin can attach it to the right organization or discard it. Attaching does not trigger a resync, and a failed Stripe attach does not clear a customer id the organization already had.
What customers see
/dashboard/billing shows AI responses used against the plan limit, and a View invoices button opens the provider's portal. Error messages for billing problems no longer mention internal commands.
Audit and docs
Checkout, cancel, resume, organization creation, and access revocation are now written to the organization audit log. The billing docs and the support runbook explain the three unpaid states: Stripe recoverable, Polar canceled, Creem grace. The terms template names Stripe, Polar, or Creem, and the brand config uses placeholders instead of a made-up street address.