Stripe + Express

Stripe Integration for Express.js APIs

Clean middleware patterns for Stripe routes, webhook verification, and error handling.

Express's middleware model needs specific handling for Stripe webhooks — the raw request body must bypass JSON body-parsing middleware for signature verification to work, a detail commonly missed.

Express's middleware model has one specific interaction with Stripe that breaks almost every first webhook implementation: `express.json()` (or any global body-parser middleware) consumes and parses the raw request body before your handler ever sees it, and Stripe's signature verification requires the exact, unparsed raw bytes to validate correctly.

The Raw-Body Webhook Fix, and What Else Matters

  • Apply `express.raw()` scoped to just the webhook route, before any global JSON body-parser middleware runs against it
  • Verify the signature against that raw buffer using the Stripe SDK's `webhooks.constructEvent`, not a manually parsed body
  • Rate-limit Stripe-facing routes to prevent abuse, while still accepting Stripe's legitimate webhook retries
  • Return a 2xx response quickly, then process the event — a slow synchronous handler risks Stripe's delivery timeout and triggering unnecessary retries

This single body-parsing detail accounts for a large share of "webhooks work locally but fail in production" reports we see — it's an easy fix once diagnosed, and a genuinely confusing failure mode if you don't already know to look for it.

Frequently Asked Questions

Get Started

Get Stripe Integrated Into Your Express Project

Get a scoped estimate within 24 hours, no obligation to proceed.