WebhookStash

Test Stripe Webhooks Instantly

Capture, inspect, and replay Stripe event payloads in seconds — no servers, tunnels, or expired URLs. Secure by design with encrypted storage.

Why test Stripe webhooks?

Stripe sends event notifications (like checkout.session.completed or payment_intent.succeeded) to your backend via webhooks. Testing these locally can be frustrating: public URLs expire, payloads disappear, and replays are clumsy. WebhookStash gives you a persistent endpoint with real-time inspection and safe, reliable replays.

How to test Stripe webhooks (step-by-step)

1) Create a WebhookStash URL

  1. Go to WebhookStash.com, sign in with GitHub, and create a project.
  2. You'll instantly get a unique endpoint like: https://api.webhookstash.com/p/[project-id]/[token]

2) Configure Stripe

  1. In your Stripe Dashboard → Developers → Webhooks, click Add endpoint.
  2. Paste your WebhookStash URL.
  3. Select the events to listen for (e.g. checkout.session.completed).
  4. Save.

3) Trigger a test event

Perform a test checkout or use Stripe's test mode to generate events. Events will appear in WebhookStash instantly with headers, event type, and formatted JSON.

4) Inspect and replay safely

  • View and copy formatted JSON payloads.
  • Replay events from the WebhookStash backend to public/staging endpoints.
  • cURL replay is provided with real-time streaming for local testing.
  • API support for authenticated, full-payload replays when you are the data controller.

Example: handle Stripe events in Node.js

import express from "express";
import bodyParser from "body-parser";

const app = express();
app.use(bodyParser.json());

app.post("/webhook", (req, res) => {
  const event = req.body;
  console.log(`Received event: ${event.type}`);

  switch (event.type) {
    case "checkout.session.completed":
      // Handle successful checkout
      break;
    default:
      console.log(`Unhandled event type ${event.type}`);
  }

  res.sendStatus(200);
});

app.listen(3000, () => console.log("Listening on port 3000"));

Local debugging with CLI streaming

Stream webhooks to your localhost using our CLI. View full payloads in the dashboard. This prevents accidental exposure via terminals, screenshots, or clipboard tools. You can still exercise your local handler:

curl -X POST http://localhost:3000/webhook \
  -H "Content-Type: application/json" \
  -d '{
    "id": "evt_1MqGxN2eZvKYlo2C8qJ3k7Gk",
    "type": "checkout.session.completed",
    "data": {
      "object": {
        "customer_email": "[email protected]",
        "client_reference_id": "user_12345",
        "amount_total": 2000
      }
    }
  }'

Replay webhooks from the dashboard to any endpoint, or stream them to localhost using the CLI. so sensitive data never leaves secure server-side boundaries.

Common Stripe events you can test

  • checkout.session.completed
  • payment_intent.succeeded
  • invoice.payment_failed
  • customer.subscription.created
  • payment_method.attached

Why developers choose WebhookStash

  • ✅ Persistent URLs — no more expired tunnels
  • ✅ Backend-origin replays — safe by default
  • ✅ CLI streaming for localhost — privacy-first
  • ✅ Authenticated API replays — full payloads when you're the data controller
  • ✅ Works with any webhook provider

FAQs

Does this work with Stripe test mode?

Yes. Use your Stripe test keys and events as usual — WebhookStash works perfectly with the Stripe sandbox.

Can I replay to localhost?

Yes — use the CLI to stream webhooks to your local handler. For full-payload replays to staging or production, use the authenticated API so sensitive data stays server-side.

How does WebhookStash keep webhook data secure?

Only authenticated project owners can access webhook data. Data is encrypted in transit and at rest. Learn more on our Privacy & Security page.

Start testing Stripe webhooks

No setup. No servers. No hassle.


Related guides: Webhook Tester Online Test Stripe Webhooks Webhook Debugger for Shopify Inspect Slack Webhooks Send Test Webhook