Select your provider and framework. WebhookFix generates the full handler โ raw body method, middleware exclusion, and edge runtime variant โ the three places every tutorial skips.
Buffer with TextEncoder โ Buffer doesn't exist on Edgeconfig = {api: {bodyParser: false}}. App Router: that config is deprecated and silently ignored. Use request.text() โ but call it before any other body read, or the stream is consumed.
/api/webhooks from the matcher.
Buffer.from() doesn't exist on Vercel Edge Runtime or Cloudflare Workers. Use TextEncoder and the Web Crypto API instead. The HMAC algorithm is identical โ only the API changes.
bodyParser: false not work?await request.text() first, verify the signature against that string, then parse to JSON yourself with JSON.parse(body). Never call request.json() before signature verification.whsec_. The Stripe CLI generates a different secret when you run stripe listen. Using the wrong one causes every verification to fail even though your code is correct.Buffer doesn't exist on Edge. The generated handler uses the Web Crypto API (TextEncoder + crypto.subtle) which is available everywhere. Add export const runtime = 'edge' to your route file.X-Hub-Signature-256 with HMAC-SHA256. Stripe uses Stripe-Signature with a timestamp-prefixed payload. The framework-level fix (raw body, middleware exclusion) is identical.Done with this tool?
20 HTTP checks before you ship โ security, CORS, cache, redirects, staging.
Pre-Launch Checklist โ