Bolt·FixpaymentsStripeintermediate

Bolt Stripe Webhook Not Updating Access

Quick Answer

The browser redirect is working, but the webhook is failing, not matching the user correctly, or never writing the payment result into the database. In Stripe integrations, the webhook is the source of truth, not the success page. Start with "Check webhook delivery logs in Stripe first" before making broader code changes.

You're in the right place if...

  • !Payment succeeds but the user never gets access
  • !Stripe shows successful events but the app still looks unpaid
  • !The success page loads, but the database never updates

Why this happens

The browser redirect is working, but the webhook is failing, not matching the user correctly, or never writing the payment result into the database. In Stripe integrations, the webhook is the source of truth, not the success page.

Fix

1

Check webhook delivery logs in Stripe first

Open Stripe Dashboard -> Developers -> Webhooks and inspect the event deliveries. If Stripe is retrying or showing 400/500 responses, fix the webhook before touching the UI.

2

Rebuild the webhook handler in Bolt

Make sure the handler reads the raw body, verifies the signature, and maps the event back to the correct user record.

Copy this prompt

The Stripe webhook is not updating access after payment.
Please rebuild the webhook handler so it:
1. reads the raw request body
2. verifies the Stripe signature
3. handles checkout.session.completed
4. matches the user using metadata or customer email
5. updates the payments or subscriptions table
6. returns 200 quickly after processing
3

Store the Stripe identifiers in your database

Do not rely only on email. Save the Stripe customer ID, checkout session ID, or subscription ID so later events can update the same record reliably.

Prevent this next time

Never grant paid access only from the frontend success page. The webhook should update the database, and the app should read access from that database record.

Frequently Asked Questions

The user can hit the success page without your app verifying a completed payment. The webhook is the reliable server-side confirmation.

At minimum store the customer ID, price ID, and payment or subscription status. For subscriptions, also store the Stripe subscription ID.

Related fixes

Weekly Newsletter

Get next week's fix before you need it.

Join developers getting weekly vibe coding tips, error fixes, and tool updates.

Subscribe on Substack →