Webhook endpoints are per mode too. You created the endpoint in test mode; live mode has zero endpoints, so Stripe has nowhere to send anything.
- Live mode > Developers > Webhooks > Add endpoint, same URL, same events.
- Copy that endpoint's live signing secret into Vercel
STRIPE_WEBHOOK_SECRETfor Production, redeploy. - For the customer who already paid: resend the event from the endpoint's event list once it exists, or just upgrade her by hand in the DB.