Webhooks for everyone
Stable webhook URLs. Zero infrastructure.
Stop using ngrok. Add one SDK call and your local app receives real webhooks over WebSocket.
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