HOW IT WORKS
Subscriptions and billing
Checkout, current subscription access, billing management and cancellation.
Last reviewed November 2026
Current subscription access
Access follows current Stripe subscriptions for the account customer, not historical Checkout metadata. Only recognized configured prices on active or trialing subscriptions grant a plan. Desk takes precedence over Lite when multiple valid subscriptions exist.
Cancellation scheduled for period end retains access while Stripe reports active or trialing. Past-due, unpaid, paused, incomplete, expired and canceled subscriptions do not grant access; this release has no unpaid grace period.
Checkout and account management
Existing subscriptions open the billing portal. Pending same-plan Checkout sessions are reused; known prior open selections are expired before replacement. Customer and request identities persist for idempotent retries. Desk trials require no prior subscription history for that Stripe customer.
Checkout-return recovery requires the exact account/session binding and reconciles current subscriptions. An old paid Checkout link cannot revive canceled access. Portal plan switching and cancellation depend on the operator enabling those features in Stripe.
Audit detail — reproduction & protocol
Delivery and consistency
A durable per-customer lease serializes canonical subscription reads and writes. Webhook event receipts and plan updates commit atomically, duplicate receipts are harmless, and transient failures return retryable errors. Historical event payloads trigger a current-state read rather than overwriting a newer subscription.
Production requires canonical APP_ORIGIN, live plan prices, webhook signing secret and portal configuration. POSTs require the expected browser origin; private responses are no-store, and malformed or oversized bodies are rejected before provider calls. Mocked tests do not prove live delivery, payment success, cancellation or recovery; those require a controlled production lifecycle check.
Research tooling, not trading advice — see the terms and privacy policy. Questions or corrections: [email protected].