Quick Start
Get your first webhook up and running in under 5 minutes. No SDKs required — and no server either, if your flow doesn't need one.
How it works
HostWebhook sits between whoever is sending you webhooks and wherever those events need to end up. Each webhook you create gets a unique ingress URL — point your provider (Stripe, GitHub, etc.) at that URL and the event lands in a pipeline you control.
The simplest pipeline is a straight line: receive, forward to your server, retry until it sticks. Even that buys you something a direct webhook cannot — the event is stored before anyone tries to deliver it. A deploy, a timeout or a 500 on your side costs you nothing, because the provider already got its 202 and the retries are now on your terms, not theirs.
api.hostwebhook.com/api/in/:token
One of these, several at once, or none of them.
That middle box is the part worth reading twice. Between the two arrows you can drop events you don't care about, reshape the payload, route on what it contains, hand it to an AI node, or fan it out to several destinations at once — none of which requires code on your side. Your server is optional: plenty of flows never touch a backend at all and end in Discord, a spreadsheet or a database.
Step-by-step
Create a webhook on the canvas
Go to Dashboard → Flows, add a Webhook node to the canvas, and open it to fill in:
- Name — a friendly label (e.g. "Stripe production")
- Target URL — optional. Your server's webhook handler (e.g.
https://yourapp.com/webhooks/stripe). Leave it empty when the flow ends somewhere else, like a Discord or Sheets node. - Max retries — how many times to retry a failed delivery (default: 3)
Copy your ingress URL
After creating the webhook, open its detail page. You'll see your personal ingress URL:
https://api.hostwebhook.com/api/in/<your-token>Point your webhook provider to this URL. It will accept any HTTP POST with any payload (JSON, form-encoded, raw bytes).
Send your first event
Test it from the terminal with curl:
curl -X POST https://api.hostwebhook.com/api/in/<your-token> \
-H "Content-Type: application/json" \
-d '{"event": "test.ping", "data": {"hello": "world"}}'You'll get a 202 Accepted response immediately. The event is now queued for delivery to your server.
Handle the webhook in your server
Your server receives a POST request with the original payload and a few extra headers:
POST /webhooks/stripe HTTP/1.1
Host: yourapp.com
Content-Type: application/json
X-HostWebhook-Event-Id: 64f1a2b3c4d5e6f7a8b9c0d1
X-HostWebhook-Attempt: 1
X-HostWebhook-Signature: t=1714000000000,v1=a3f8c2d1...
{"event": "test.ping", "data": {"hello": "world"}}Return any 2xx status code to mark the delivery as successful. Any other status (or a timeout) will trigger a retry.
Verify the signature (recommended)
Use the signing secret from the webhook detail page to verify that the request came from HostWebhook and wasn't tampered with.
import crypto from "crypto";
function verifySignature(
rawBody: string, // raw request body as string
signature: string, // X-HostWebhook-Signature header
secret: string, // signing secret from dashboard
): boolean {
// Parse "t=<timestamp>,v1=<hmac>"
const parts = Object.fromEntries(
signature.split(",").map((p) => p.split("=") as [string, string]),
);
const ts = parts["t"];
const v1 = parts["v1"];
if (!ts || !v1) return false;
const expected = crypto
.createHmac("sha256", secret)
.update(`${ts}.${rawBody}`)
.digest("hex");
if (expected.length !== v1.length) return false;
return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Monitor events
Open your webhook in the dashboard to see every event in real-time: status, HTTP response code, response body, and latency. Failed events show their retry schedule. You can manually replay any event at any time.
Next steps
- →
Marketplace — start from a template
Pre-built integrations: Stripe → Discord, GitHub → Slack, and more
- →
Local development
Forward webhooks to localhost with hostwh forward
- →
Verifying signatures
Authenticate every incoming request
- →
Events & retries
Understand the retry schedule and event lifecycle
- →
Webhooks & transforms
Deliver to multiple URLs, filter events, and transform payloads
- →
Use as AI tool or flow target
Let AI agents and other flows in your org invoke this endpoint internally — no HTTP needed
- →
API reference
Full REST API documentation