You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #6654. What looked like a one-off webhook miss is recurring across multiple orgs — this is a systemic Stripe→DB sync gap, not an isolated incident.
Confirmed occurrences
All show a live/active Stripe subscription with stale or null subscription_status in our DB:
Paying members are denied entitlement (blocked from member-only benefits, directory listing stuck in draft, "tier pending billing sync" messaging) despite having a valid, active subscription in Stripe. This is now confirmed across at least 3 distinct orgs, with one org recurring after a prior manual fix.
Root cause (suspected)
customer.subscription.created / customer.subscription.updated webhook events are not reliably updating subscription_status in our DB. Because Stripe's webhook delivery log only retains ~1 week of history, once a sync gap is discovered, the original event is frequently no longer available to replay — making point-in-time webhook resend an unreliable recovery path.
Immediate mitigation
Each affected org has (or had) a documented fix via:
POST /api/admin/accounts/{org_id}/sync
This pulls fresh state directly from Stripe and corrects the DB row. This is a per-org manual remediation, not a fix for the underlying gap.
Requested investigation
Determine why webhook events are failing to update subscription_status — check Stripe webhook endpoint delivery success rate, error responses, and whether failures are silent (no retry/alerting) on our side.
Add alerting for webhook delivery failures so gaps are caught within Stripe's replay window, rather than discovered later by members hitting entitlement walls.
Summary
Follow-up to #6654. What looked like a one-off webhook miss is recurring across multiple orgs — this is a systemic Stripe→DB sync gap, not an isolated incident.
Confirmed occurrences
All show a live/active Stripe subscription with stale or null
subscription_statusin our DB:subscription_statuswas null/stale despite active Stripe subscription. Root cause at the time: suspected missed/failed webhook, now aged out of Stripe's ~1 week replay retention window.subscription_status="canceled"while Stripe shows the subscription active.subscription_status=nullwhile Stripe shows the subscription active.org_01KE4YM7PV25DZFFYD7REVXTK4): DB showssubscription_status=nullwhile Stripe shows the subscription active. This is the same org as Stripe subscription active but not synced to org — missing webhook event, no replay possible #6654 — meaning either the manual backfill from Stripe subscription active but not synced to org — missing webhook event, no replay possible #6654 didn't fully resolve the underlying issue, or the sync gap recurred independently after the fix.Impact
Paying members are denied entitlement (blocked from member-only benefits, directory listing stuck in draft, "tier pending billing sync" messaging) despite having a valid, active subscription in Stripe. This is now confirmed across at least 3 distinct orgs, with one org recurring after a prior manual fix.
Root cause (suspected)
customer.subscription.created/customer.subscription.updatedwebhook events are not reliably updatingsubscription_statusin our DB. Because Stripe's webhook delivery log only retains ~1 week of history, once a sync gap is discovered, the original event is frequently no longer available to replay — making point-in-time webhook resend an unreliable recovery path.Immediate mitigation
Each affected org has (or had) a documented fix via:
This pulls fresh state directly from Stripe and corrects the DB row. This is a per-org manual remediation, not a fix for the underlying gap.
Requested investigation
subscription_status— check Stripe webhook endpoint delivery success rate, error responses, and whether failures are silent (no retry/alerting) on our side.cus_...ID on a schedule, not just on-demand via manual/synccalls or support escalation.Related