Webhooks for everyone

Stable webhook URLs. Zero infrastructure.

Stop using ngrok. Add one SDK call and your local app receives real webhooks over WebSocket.

Get started How it works
import express from "express";
import { listenToWebhooks } from "@simplehook/express";

const app = express();
listenToWebhooks(app, process.env.SIMPLEHOOK_KEY);

app.post("/stripe/events", (req, res) => {
  console.log("Webhook:", req.body);
  res.json({ received: true });
});

Works with Stripe, GitHub, Twilio, Shopify, and every webhook provider.

How it works

Three steps. Zero config.

1. Install the SDK

npm install @simplehook/express — one package, zero config.

2. Add one line of code

listenToWebhooks(app, apiKey) — opens an outbound WebSocket to simplehook.

3. Receive webhooks

Webhooks arrive as normal HTTP requests. Your response flows back to the caller.

Features

Everything you need

Instant delivery

Webhooks arrive at your local server in milliseconds via persistent WebSocket.

Automatic retries

Failed deliveries are retried with exponential backoff. Nothing gets lost.

Encrypted in transit

All webhook payloads are encrypted. No request bodies stored on our servers.

Stable URLs

Your webhook URL never changes. Set it once in Stripe, GitHub, or any provider.

Real responses

Your Express/Flask response flows back to the webhook caller — full passthrough.

AI agent API

Pull events via HTTP — instant, long-poll, or SSE stream. Built for agents.

Pricing

Simple, transparent pricing

Free

For trying things out

$0/mo

  • 1 project
  • 500 events/month
  • Community support

Pro

For teams and production

$9/mo

  • Unlimited projects
  • 50k events/month
  • Priority support

Start receiving webhooks in 30 seconds

One install. One line of code. Every webhook provider works.

Get started