Vovy builds a verified Stripe webhook endpoint, tests it locally with the Stripe CLI, and registers it in Stripe so payments update your app.
Set up Stripe webhooks so my database updates when people pay
How it works
- Write the webhook endpoint: In Cursor Vovy adds an endpoint that verifies Stripe's signature, then handles checkout.session.completed, customer.subscription.updated, customer.subscription.deleted and invoice.payment_failed.
- Test it on your Mac: It installs the Stripe CLI and runs stripe listen with --forward-to your local endpoint, which sends real sandbox events to your laptop.
- Fire test events: Vovy runs stripe trigger checkout.session.completed and shows each event and your server's response in a table.
- Register the live endpoint: It adds your deployed URL as a webhook destination in Stripe Workbench, picks the same events, and copies the whsec_ signing secret into your server.
- Confirm your database updates: Vovy makes a test purchase and shows the matching row change in Supabase next to the delivered event in Stripe.
What you provide
- A Stripe account
- Your deployed app URL
- A database table for customers
What you get
- A verified webhook endpoint
- Local testing with the Stripe CLI
- Live webhook registered in Stripe
- Payments synced to your database
FAQ
What does "No signatures found matching the expected signature for payload" mean?
Usually your framework changed the request body before verification, or you used the wrong whsec_ secret. The CLI and dashboard each have their own secret.
Why not just update the database on the success page?
Users close tabs, and renewals and cancellations happen with nobody on your site. Webhooks catch all of it.
What if my server is down when Stripe sends an event?
Stripe retries failed deliveries for up to three days, and you can resend events from the dashboard.
Related tasks
All tasks