Inbound webhook gateway

Never lose a webhook

One ingest URL for Stripe, GitHub, Shopify, or anything else that sends webhooks. Webhooker checks the signature, stores the event so it can't vanish, and delivers it to your services with retries, replay, and a full per-attempt history.

free plan · 10,000 events/month · no card required · hosted in the EU

live tail source: stripe-prod · SSE

How it works

How does Webhooker handle a webhook?

In three stages, and the event survives every one of them. Webhooker verifies the signature, writes the event to durable storage before answering the provider, and only then delivers it to your services. Accepting an event and delivering it are separate, transactional steps, so a slow or broken destination never costs you a webhook.

New to the mechanics? Start with how webhooks actually work, or read what a webhook gateway does that a plain endpoint doesn't.

STAGE 01

Receive & verify

Your provider calls a unique ingest URL. The signature is checked against the source's scheme before the payload is accepted. A bad signature gets a 401 and is logged for audit, never delivered.

HMAC-SHA256 / SHA1

STAGE 02

Persist

The event is written to a durable queue before the provider gets its 200 OK, in single-digit milliseconds. Nothing is acknowledged until it is stored. Webhooker acknowledges 99% of inbound webhooks in under 10 milliseconds, measured server-side.

p99 < 10 ms server-side

STAGE 03

Deliver & retry

Competing workers fan the event out to your destinations: six attempts over about five hours with exponential backoff, status-conditional retries and a circuit breaker per destination. Failures land in a DLQ you can resend from.

at-least-once

Features

What does Webhooker include?

Everything between the provider's POST and your handler: signature verification, retries with a circuit breaker, per-destination transformations, signed outbound requests, a live event tail with replay, and failure alerts. It is the unglamorous plumbing every integration needs, built once and shared by all your sources and destinations.

If you are still deciding whether to poll or be pushed, we lay out webhooks versus polling an API and where each one wins.

Signature verification

Per-source HMAC-SHA256 and SHA1 schemes checked before a payload is accepted. Forged requests get a 401 and are never delivered.

Smart retries & circuit breaker

Exponential backoff, conditional retries by HTTP status, and a per-destination circuit breaker that stops hammering a downed service.

Transformations

Declarative, per-destination payload reshaping and header injection. Send each service exactly the shape it expects.

Outbound signing

Forwarded requests are signed, so your destinations can verify every delivery really came from Webhooker.

Live tail & replay

Real-time event stream over SSE, full history, and a per-attempt delivery log with one-click resend of any event.

Delivery alerts

Set alerts per source and hear about it in the app or by email when a delivery runs out of retries or a destination's circuit opens.

<10 ms

to acknowledge 99% of events

at-least-once

delivery guarantee, duplicates possible

6 attempts

per destination over about five hours

SSE

streams incoming events live

Webhooker acknowledges 99% of incoming webhooks in under 10 ms server-side and delivers every event at least once, so your consumer should expect duplicates.

EU data residency

Where is Webhooker hosted?

On Hetzner servers in Germany, inside the European Union, full stop. Payloads, delivery logs and backups are never mirrored to a US cloud region. When a customer or auditor asks where your webhook data lives, the answer is one word: Germany.

The GDPR question underneath it is whether a payload is personal data at all — we go through it field by field.

Hosted in Germany

Ingest, storage and delivery workers run on Hetzner in Germany, and backups stay in EU data centers. Not "EU-first" with exceptions buried in the fine print. EU only.

GDPR by design

Retention limits are enforced, deleted means deleted, and a data processing agreement is available for every paid plan. See the privacy policy for the details.

You set the clock

Events expire after 14, 30 or 90 days depending on plan. Export what you need before then, or delete it earlier. It's your data.

Pricing

How much does Webhooker cost?

Webhooker is free for up to 10,000 events a month. Pro costs €29 a month and Team €99, and yearly billing gives you two months free. The core pipeline is on every plan: verification, retries, transformations, replay and alerts. Paid plans add a DPA on Pro and Team, plus ordered delivery and a static outbound IP on Team.

Free

€0 / month

Side projects and evaluation.

  • 10,000 events / month
  • 3 sources · 9 destinations
  • 14-day event retention
  • 120/min ingest rate
Start for free

Team

€99 / month €990 / year

High volume, ordered delivery, static IP.

  • 1,000,000 events / month
  • 200 sources · 1,000 destinations
  • 90-day event retention
  • 25 workspace members
Start with Team

Need more? Talk to us.

Destinations are a shared pool — any source can use as many of them as it needs. Yearly billing costs ten months for twelve, on Pro and Team.

FAQ

Frequently asked questions

What is Webhooker?

Webhooker is an EU-hosted inbound webhook gateway. You give Stripe, GitHub, Shopify or any other provider one ingest URL; Webhooker verifies each webhook's signature, stores the event durably on servers in Germany, and delivers it to your own services with retries, a dead letter queue, replay and a full delivery log. The free plan covers 10,000 events a month.

What is a webhook gateway?

A webhook gateway sits between the services that send webhooks and the services that consume them. Webhooker receives each event on a unique ingest URL, verifies its signature, writes it to durable storage, and then delivers it to your destinations with retries and a full per-attempt log.

What a webhook gateway does that a plain endpoint cannot

What happens when my service is down?

Webhooker keeps the event. Each destination gets six delivery attempts over about five hours with exponential backoff, a per-destination circuit breaker pauses delivery to a downed service, and anything that still fails lands in a dead letter queue. From there you can resend a single event or a whole batch once your service is back.

How retries with exponential backoff actually behave

Where is my webhook data stored?

In Germany, inside the European Union. Webhooker's ingest, event storage and delivery workers run on Hetzner servers in Germany, backups stay in the EU, and webhook payloads are not transferred outside the EU. Events are deleted automatically when your plan's retention window ends: 14, 30 or 90 days.

Why EU-hosted webhook infrastructure matters under GDPR

Can I replay old webhooks?

Yes. Webhooker keeps every event for your plan's retention window, along with the full delivery history of each attempt. Any event can be resent to any destination with one click, and dead-lettered events can be replayed in bulk.

Which providers can send webhooks to Webhooker?

Any service that sends an HTTP POST. Webhooker verifies per-source HMAC-SHA256 and SHA1 signatures, the schemes used by Stripe, GitHub, Shopify and most other providers, and answers a bad signature with a 401: the event is kept for your audit log but never delivered.

From the blog

How webhooks actually behave in production.

Signature verification, retries, idempotency and replay — written from running the thing, not from the spec.

Read all articles →

Why this exists

We built Webhooker because we were tired of rebuilding the same webhook plumbing, verification, retries and replay, in every new project. It stays small and focused on purpose, with a bias for boring reliability.

Point your provider at us.

Create a source, paste the URL into Stripe or GitHub, and watch events arrive in the live tail. Verification, storage and delivery are already handled. The quick start takes four steps, and the ingest URL reference lists every response code.

https://app.webhooker.eu/in/{your-token}