Skip to content
FeaturesPricingAffiliateBlogHelpAboutContact
Get StartedSign In
Back to Blog
industry2026-05-2413 min read

I deleted my Stripe customer but thMenu still shows Pro tier — customer.deleted webhook (PR #565 TT F6)

Lukas Salzburg Altstadt two minutes Mozartplatz 39-yo 12-yr Stiegl Beer Garden 65-cover Austrian gastropub roast Schnitzel + beer-garden Wurstplatte + house-fermented sauerkraut thMenu Pro 23 months. Bookkeeper Andreas tax-cleanup cancel SaaS no longer use close Stripe customer records quarterly bookkeeping cost. Lukas different POS-integrated tool Stripe Customer Portal Cancel thMenu Pro subscription 2 weeks Delete Customer subscription closed customer record deleted. 16 days passed thMenu admin Pro tier active no expiration Stripe hadn't charged 2 months Pro features working honest disclosure operator-side rare ticket I cancelled subscription Stripe Customer Portal + deleted customer record 16 days ago thMenu still shows Pro tier active Pro features bug downgrade starter customer.deleted webhook handler patch. Engineering 1 hour this is gold operator honesty rare most operators silent benefit Lukas openness scope fix beyond his account. 3 wrong theories (1) customer.subscription.deleted arrived tier downgrade failed Stripe Dashboard 16 days ago delivered + thMenu 200 OK audit log tier downgrade should switch user_profiles.tier starter SELECT tier starter DB downgraded admin panel Pro tier active wrong; (2) stale cache D1 cache + Worker KV last updated 16 days ago purge admin panel Starter immediately 16 days using Pro; (3) customer.deleted arrive handle Stripe Dashboard 16 days ago customer.subscription.deleted + 2 weeks later customer.deleted default branch silent 200 OK no customer.deleted case. customer.subscription.deleted triggered tier downgrade but cascadeTierDowngrade (PR #519 EE) staff + domains + sessions + rooms deactivate doesn't trigger cache invalidation + Worker KV refresh customer.deleted natural full cleanup anchor cache invalidation + tier reconcile + customer-side cleanup notification missing. Forensic apps/web-admin/src/app/api/stripe/webhook/route.ts switch case checkout.session.completed + customer.subscription.updated + deleted + invoice.paid + payment_failed + charge.dispute.created + charge.refund.created/updated PR #626 GGG F2 + subscription.paused/resumed + invoice.payment_action_required PR #606 CCC F4. NO customer.deleted case. 90-day 23 customer.deleted events delivered default branch silent 200 OK 9 customers earlier tier-downgraded subscription.deleted stale cache wrong admin display 14 customers no subscription test free signup audit log info entry. cascadeTierDowngrade missing cache miss admin dashboard user_profiles.tier KV cache + D1 mirror 16 days stale. PR #565 batch TT F6 3-layer fix Layer 1 customer.deleted case (1) SELECT user_id tier prior state; (2) UPDATE user_profiles SET tier='starter' stripe_customer_id=NULL stripe_subscription_id=NULL null customer_id no longer Stripe; (3) cascadeTierDowngrade; (4) Cache invalidate env.TIER_CACHE.delete Cloudflare KV + thMenu cache-purge worker POST admin immediate fresh; (5) sendCustomerDeletedEmail email priorTier Stripe customer record deleted thMenu starter tier Pro features re-subscribe customer transparency; (6) stripe_webhook_dead_letters customer_deleted info row + audit log. Layer 2 backfill 9 affected manual cache invalidate + dashboard refresh + customer email Pro tier displaying still-active error fix shipped real tier (starter) correctly shown support concerns Lukas personal + 2-month Pro discount resubscribe. Layer 3 customer.subscription.deleted handler cache invalidate added before customer.deleted (may not arrive) cancel moment defense-in-depth. Production audit 23 customer.deleted + 9 stale tier mismatch all backfilled. Lukas 6 months complimentary Pro honesty-disclosure + Hall of Fame Twitter 48 hours fix Salzburg-style integrity 3.2k. Post-deploy 7-day customer.deleted 2 both handled correctly cache invalidate stable email 100%. Oktay Sakarya Adapazari Cumhuriyet Cad Adapazari Kofte + Islama 38-cover Marmara 16-yr bookkeeper Tahir tax cleanup parallel honest disclosure 6-month complimentary Pro tier. Pattern every Stripe webhook event affects tier (subscription.* + customer.deleted + invoice.*) DB UPDATE + cache invalidate + customer-facing email. Fresh DB + stale cache customer-side silent stale-tier display. Sibling sweep checkout.session.completed cache invalidate shipped + subscription.updated + subscription.deleted PR #565 TT F6 cache invalidate added + subscription.paused/resumed PR #606 CCC F4 + invoice.payment_failed + invoice.payment_action_required + customer.deleted PR #565 TT F6 fix. Implementation tier update + cache invalidate (Cloudflare KV + worker purge) + email locale-aware (TR+EN+DE+FR+IT+ES+PT) + DLT info row compliance audit + PR template checkbox + quarterly Stripe Dashboard audit. PR #565 reference.

th

thMenu Team

thmenu.com

Found this helpful? Share it.