If the Stripe delivery log shows 307 or 308, your app answered with a redirect instead of handling the event. Stripe doesn't follow it.
Stripe's docs list 3xx as a delivery error: "We consider redirect responses to webhook requests as failures. Set the webhook endpoint destination to the URL resolved by the redirect." (Stripe docs).
www and will try to redirect automatically between them (Vercel docs). If Stripe points at the non-canonical one, every event bounces.permanent: true redirects use 308 and temporary ones use 307 (Next.js docs). Trailing-slash and locale rules can catch your webhook path too.curl -i -X POST https://yourdomain.com/api/webhooks/stripe. If you see location: in the response, that's your real URL.Paste your webhook URL. WebhookProof sends 3 harmless test requests and tells you whether Stripe can reach it and whether it rejects unsigned events.
Run the free checkYour URL redirects, usually apex to www (or the reverse), http to https, or a trailing-slash rule. Stripe treats redirects as failed deliveries.
No. Set the endpoint to the final URL the redirect points to.
In Next.js redirects, permanent: true uses 308 and permanent: false uses 307. Both are redirects, and Stripe fails both.
Stripe webhook not working? Check these 7 things in order · A customer paid but didn't get access. What went wrong? · Stripe webhook signature verification failed · Stripe webhook on Supabase Edge Functions: fixing 401s and signature errors
Last reviewed 2026-10-18. WebhookProof is an independent tool, not affiliated with Stripe, Inc. Quotes are from the linked documentation.