Payment failures
Stripe retry windows, graceful access policies, and when LogoRouter subscriptions end.
This mirrors the playbook popularised by billing platforms such as Commet (“Payment Failures”), adapted for Stripe + LogoRouter.
TL;DR
Card decline or payment failure occurs
→ Customer typically keeps LogoRouter entitlement during Stripe’s retry window
→ Stripe retries according to Smart Retries / your account settings
→ All retries exhausted & invoice left open
→ Subscription becomes terminal → Neon plan downgrades → Worker limits tightenNo surprise hard-off on the first decline unless fraud or mandate requires it — Stripe’s invoicing primitives give multiple chances to recover revenue while customers stay productive.
What your team experiences
| Stage | Product access | What’s happening |
|---|---|---|
Invoice open after first decline | Generally still active | Stripe schedules automatic retries (invoice.payment_* hooks) |
| During Smart Retry window | Still active | Customer can update PM in Stripe Customer Portal / email links |
Retries exhausted + subscription canceled / past_due terminal | Escalating loss of entitlement | Postgres reflects new tier; KV cache expires; Worker may emit 402/429 style errors |
Stripe is the canonical clock — LogoRouter observes webhooks rather than guessing card status.
Portal deep links
Encourage admins to bookmark the Stripe Customer Portal baked into /dashboard/billing. Updating a saved card resolves most soft declines without support tickets.
Trials ending into a failed invoice
Trials behave like deferred first invoices. See Trials — if renewal fails immediately after trial, Stripe still schedules retries LogoRouter honours until terminal failure.
Deleting a billing profile
Deleting a Stripe customer via dashboard cancels subscriptions immediately. Access revocation is synchronous with webhook ingestion — do not expect a grace window after manual deletion because there is nothing left to bill.
Operator checklist
- Inspect Stripe balance summary vs Radar friction (3DS, issuer decline codes).
- Pull recent
invoice.payment_failedpayloads in Stripe test mode replay. - Verify Neon
billing_plansrow still matches Stripe price IDs after SKU changes.